¿Cómo chmod y chown archivos ocultos en Linux?

33

¿Cómo ejecuto recursivamente chmodo chownpara archivos ocultos?

sudo chmod -R 775 * No funciona en archivos ocultos.

Lo mismo vale para sudo chown -R user:group.

nada especial aquí
fuente

Respuestas:

35

Si está bien también modificando el directorio actual, haga eso y deje que -Rhaga el trabajo pesado. -RNo ignora los archivos ocultos.

sudo chmod -R 775 .
John Kugelman apoya a Monica
fuente
14
Esta ( * .*) no es la forma más segura de hacerlo. Particularmente, volvería a aparecer en el directorio principal, lo que significa que chmodtambién son hermanos del directorio actual. La forma correcta sería * ..?* .[^.]*o, incluso mejor (teniendo en cuenta que los comodines podrían no coincidir con ningún archivo) $(ls -A).
jpalecek
1
@jpalecek: La salida de no lses analizable; tratar de analizarlo es pedir problemas. El enfoque adecuado es usar el engrosamiento de conchas.
Scott Severance
Aunque en Linux tiene la capacidad de cambiar el orden de los argumentos para chmod, al hacer scripts de x-plat entre Linux y OS X, este es el orden que debe usar, por ejemplo, sudo chmod 775 -Riría hacia arriba, así que siga con esta respuesta .
kayleeFrye_onDeck
35

* no incluye archivos ocultos por defecto, pero si estás en bash, puedes hacerlo con:

shopt -s dotglob

Lea más sobre esto en el builtinmanual de bash :

Si está configurado, Bash incluye nombres de archivo que comienzan con un '.' en los resultados de la expansión del nombre de archivo.

Esto hará que también *incluya archivos ocultos.

chmod -R 775 *

Desactívelo con:

shopt -u dotglob
slhck
fuente
2
¿Cómo hacer eso en zsh?
nada especial aquí
2
Utiliza el (D)calificador global, por ejemplochmod -R 775 *(D)
slhck
2

Otra opción es usar findme gusta, ya que puede tener un control muy fino sobre él.

find <path to start from> -exec chown <options> {} \+

find -path '<path to include>' -exec chown <options> {} \+

El único inconveniente es que findtiene una sintaxis diferente en diferentes versiones.

RedX
fuente
2

Todos los archivos en el directorio actual, recursivamente, incluidos los archivos ocultos:

chmod 755 -R ./* ./.[!.]*

Todos los archivos en el directorio actual, no recursivamente, incluidos los archivos ocultos:

chmod 755 ./* ./.[!.]*

Esto no cambiará un nombre de archivo de excepción que comience con 2 puntos, por ejemplo, "./..thisonescapesunharmed.txt"

Además, tenga cuidado de no eliminar el bit "x", de lo contrario no se podrá acceder a todos sus directorios (se necesita el bit x para cd en un directorio).

Recuerde esta alerta: nunca use bare *sino en su ./*lugar.

Para evitar problemas al establecer permisos en directorios, use finden su lugar.

find . -type f -exec chmod `VALUE` {} \;
Dr. Beco
fuente