¿Cómo chown / chmod todos los archivos en el directorio actual?

56

Estoy tratando de cambiar la propiedad y los permisos de algunos archivos (y directorios) en el directorio actual. Intenté esto:

chown username:groupname .

... esperando que afectaría a todos los archivos en el directorio actual, pero en cambio solo afectó el directorio en el que estoy (que es lo contrario de lo que quiero hacer). Quiero cambiarlo en todos los archivos sin afectar el directorio actual en el que estoy.

¿Cómo puedo chown y chmod todos los archivos en el directorio actual?

Andrés
fuente
man chowny man chmodresponde fácilmente tu pregunta.
Shi
2
@ Shi creo que es una pregunta justa. Leer esa página de manual no ayudaría. Globbing no es parte de chmod. Está incorporado al caparazón. Además, leer la documentación sobre globbing te quita la vida (pasé mucho tiempo descubriendo todas las características de zsh).
djf
1
@djf:chown -R user:group .
Shi

Respuestas:

96

Desea utilizar chown username:groupname *y dejar que el shell expanda *los contenidos del directorio actual. Esto cambiará los permisos para todos los archivos / carpetas en el directorio actual, pero no el contenido de las carpetas.

También podría hacerlo chown -R username:groupname ., lo que cambiaría los permisos en el directorio actual y luego volvería a aparecer dentro de él y en todas las subcarpetas para cambiar los permisos.

chown -R username:groupname *cambiará los permisos en todos los archivos y carpetas de forma recursiva, dejando solo el directorio actual. Este estilo y el primer estilo son los que uso más a menudo.

Darth Android
fuente
2
@Andrew Ten cuidado, puede ser amigo y enemigo de los cansados ​​o no preparados.
Darth Android
55
Además, tenga cuidado con los peligros del período. Como se coloca justo al lado del todopoderoso "/" en el teclado. Un simple error tipográfico puede convertir fácilmente chown -R username:groupname .en chown -R username:groupname /. Hacer una tarea de 2 segundos una pesadilla de 2 días.
teynon
@ Tom Es por eso que probablemente debería comenzar a usar -vtodos mis comandos recursivos, pero demasiado vago
Kolob Canyon
Simplemente voté como el mejor y más conciso respuesta, aunque sería específico y nombraría el directorio, solo para evitar un deslizamiento del teclado:chown -R username:groupname directoryname
Dave Everitt
9

Creo que quieres esto:

chown username:groupname *

Si también desea cambiar los subdirectorios de forma recursiva, necesitará el modificador -R( -restá en desuso):

chown -R username:groupname *

djf
fuente
0

chownes genial si eres un superusuario. Tuve un problema en el que alguien más se había ejecutado makeen mi directorio y ahora poseía algunos archivos que no podía modificar. Aquí está mi solución alternativa que maneja archivos y directorios, aunque deja los directorios con sufijo .mkmeownersi no puede eliminarlos.

  • El siguiente script cambia la propiedad de los archivos y directorios que le han pasado para ser propiedad del usuario actual, intentando solucionar problemas de permisos haciendo una nueva copia de cada directorio o archivo que no sea propiedad del usuario actual, borrando (o tratando de borrar) el archivo original y renombrarlo adecuadamente.
  • La intención es que sea una abreviatura de "hacerme dueño". No uso guiones bajos porque son difíciles de escribir.

Ejemplos:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • Requiere que el siguiente script mkmeowneroneesté en su camino.

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1
sbcondor
fuente
1
(1) Preferimos respuestas que incluyan alguna explicación. Me sorprendió cuando leí sus guiones y vi lo que hicieron, porque su párrafo introductorio no me dio una pista. (2) Olvidó mencionar que el usuario debe poner mkmeowneroneen la RUTA de búsqueda.  mkmeownerexplotará si eso no se hace. (3) Aprenda cómo (es decir, cuándo y dónde) usar comillas en comandos y scripts de shell. Decir ${f}no es una alternativa útil; ver esto . … (Continúa)
Scott
(Cont.) ... (4) Si ejecuta su script en un directorio, potencialmente copiará cada archivo en ese directorio dos veces. (5)  expres anticuado. Es más eficiente hacer una simple coincidencia de cadenas en el shell; bash también admite la coincidencia de expresiones regulares. Para el caso, puede hacer la prueba de nombre de archivo en find. (6) Su expr matchcomando prueba si ${f}termina con mkmeowner, no si termina con .mkmeowner. Por lo tanto, el script no funcionará en sí mismo. … (Continúa)
Scott
(Continúa) ... Ahora, podría decirse que esto es algo bueno: no desea moverse y eliminar un script mientras se está ejecutando. (No necesariamente va a causar un problema, pero puede ser desordenado). Pero debe comprender (y documentar) casos especiales como ese. (7) Es posible que desee utilizar guiones bajos en cadenas de varias palabras.  dirorfilees difícil de leer y comprender (comparar con dir_or_file), y cuando lo vi mkmeowner, mi primer pensamiento fue un gato ( mk +  meow +  ner).
Scott
Gracias por las notas de Scott. 1. Pensé que tenía una explicación, pero déjame ser más explícito. 2. buen punto. Había capturado eso en mi guión original, pero saqué la referencia. 3. He estado escribiendo scripts de shell durante 30 años, pero seguro, intentaré aprender más. 4. Sí lo hace. A propósito porque si no soy dueño del directorio, no puedo eliminarlo. Puedo mencionar eso. 5. Yah, estoy pasado de moda, pero expr todavía funciona bastante bien 6. Ha buen punto. 7. Podría, creo que tengo una licencia artística, ya que los guiones bajos no son una regla. ¡Necesito un guión que haga maullidos!
sbcondor
No creo que haya nada malo con $ {f}, ¿verdad? Es solo un poco más de lo necesario. Es un formato que uso con frecuencia porque es posible que quiera usar una variable para hacer una cadena más larga como $ {f} .mkmeowner, y no tengo que recordar si $ f.heck significa $ {f} + heck o $ { f.heck}
sbcondor