Comment chmod et chown des fichiers cachés sous Linux?

33

Comment exécuter récursivement chmodou chownpour des fichiers cachés?

sudo chmod -R 775 * ne fonctionne pas sur les fichiers cachés.

La même chose vaut pour sudo chown -R user:group.

rien de spécial ici
la source

Réponses:

35

Si vous êtes d'accord, modifiez également le répertoire en cours, faites-le et laissez -Rfaire le gros du travail. -Rn'ignore pas les fichiers cachés.

sudo chmod -R 775 .
John Kugelman soutient Monica
la source
14
Ce ( * .*) n'est pas le moyen le plus sûr de le faire. En particulier, il serait récursif dans le répertoire parent, ce qui signifie qu'il s'agit chmodégalement de frères et sœurs du répertoire actuel. La bonne façon serait * ..?* .[^.]*ou, encore mieux (étant donné que les caractères génériques peuvent ne correspondre à aucun fichier) $(ls -A).
jpalecek
1
@jpalecek: La sortie de lsn'est pas analysable; essayer de l'analyser, c'est demander des ennuis. L'approche appropriée consiste à utiliser le globbing shell.
Scott Severance
Même si sous linux, vous avez la possibilité de changer l'ordre des arguments pour chmod, lorsque vous faites des scripts x-plat entre linux et OS X, c'est l'ordre que vous devez utiliser, par exemple, sudo chmod 775 -Rirait de l'avant, alors respectez cette réponse .
kayleeFrye_onDeck
35

* n'inclut pas les fichiers cachés par défaut, mais si vous êtes en bash, vous pouvez le faire avec:

shopt -s dotglob

En savoir plus à ce sujet dans le builtinmanuel de bash :

S'il est défini, Bash inclut les noms de fichiers commençant par un «. dans les résultats de l'expansion du nom de fichier.

Cela fera *également inclure des fichiers cachés.

chmod -R 775 *

Désactivez-le avec:

shopt -u dotglob
slhck
la source
2
Comment faire ça en zsh?
rien de spécial ici
2
Vous utilisez le (D)qualificatif globbing, par exemplechmod -R 775 *(D)
slhck
2

Une autre option est d'utiliser findj'aime ça car vous pouvez avoir un contrôle très fin sur elle.

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

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

Le seul inconvénient est qu'il finda une syntaxe différente sur différentes versions.

RedX
la source
2

Tous les fichiers du répertoire courant, récursivement, y compris les fichiers cachés:

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

Tous les fichiers du répertoire courant, pas récursivement, y compris les fichiers cachés:

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

Cela ne changera pas un nom de fichier d'exception commençant par 2 points, par exemple, "./..thisonescapesunharmed.txt"

Attention aussi à ne pas supprimer le bit "x", sinon tous vos répertoires ne seront pas accessibles (on a besoin du bit x pour cd dans un dir).

Rappelez-vous de cette alerte: n'utilisez jamais nu *mais à la ./*place.

Pour éviter les problèmes de définition des autorisations sur les répertoires, utilisez findplutôt.

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