Comment exécuter récursivement chmod
ou chown
pour 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
.
Comment exécuter récursivement chmod
ou chown
pour 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
.
Réponses:
Si vous êtes d'accord, modifiez également le répertoire en cours, faites-le et laissez -R
faire le gros du travail. -R
n'ignore pas les fichiers cachés.
sudo chmod -R 775 .
ls
n'est pas analysable; essayer de l'analyser, c'est demander des ennuis. L'approche appropriée consiste à utiliser le globbing shell.
sudo chmod 775 -R
irait de l'avant, alors respectez cette réponse .
*
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 builtin
manuel 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
zsh
?
(D)
qualificatif globbing, par exemplechmod -R 775 *(D)
Une autre option est d'utiliser find
j'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 find
a une syntaxe différente sur différentes versions.
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 find
plutôt.
find . -type f -exec chmod `VALUE` {} \;
* .*
) 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'agitchmod
é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)
.