J'ai besoin de définir des permissions de lecture et d'écriture pour root
user root
au directory subfolderN
– subfolderN
et tous ses dossiers parents jusqu'à la root
.
Je peux le faire à la main:
$ sudo chmod +rx /root/subfolder1/subfolder2/subfolderN $ sudo chmod +rx /root/subfolder1/subfolder2 $ sudo chmod +rx /root/subfolder1 $ sudo chmod +rx /root
Mais si N
est grand, je suis fatigué. Comment faire automatiquement par une command?
Cela peut être fait facilement dans la coquille, en commençant par le subdir et en se déplaçant vers le haut:
f=/root/subfolder1/subfolder2/subfolderN while [[ $f != "/" ]]; do chmod +rx $f; f=$(dirname $f); done;
Cela commence par n'importe quel file / directory que vous définissez f aussi, et fonctionne sur chaque directory parent, jusqu'à ce qu'il rencontre "/" (ou ce que vous définissez la string dans la condition de la boucle). Il ne chmod "/".
Avec csh
, tcsh
, ksh
, zsh
, bash
ou fish
:
sudo chmod +rx /root{,/subfolder1{,/subfolder2{,/subfolderN}}}
Avec zsh
:
f=/root/subfolder1/subfolder2/subfolderN until [[ $f = / ]] {chmod +rx $f; f=$f:h;}
Je ne sais pas ce que vous essayez de faire, mais c'est mieux que vous ne prenez pas le récursif à la légère . Cela dit, lisez la réponse réelle:
Euh … pourquoi ne pas utiliser récursif.
sudo chmod -R +rx /root
Ou si vous ne l'aimez pas, vous pouvez donner à chmod
plusieurs directorys:
sudo chamod +rx /root /root/subfolder1 /root/subfolder1/subfolder2 /root/subfolder1/subfolder2/subfolderN
Eh bien, vous pourriez faire quelque chose de légèrement plus complexe comme:
echo "/root/subfolder1/subfolder2/subfolderN" | perl -anF'/' -e 'while($#F>0){@b=join("/",@F);`chmod +rx @b`; pop @F}'
Pour voir ce que cela va faire, remplacez l'appel chmod
par print:
$ echo "/root/subfolder1/subfolder2/subfolderN" | perl -alnF'/' -e 'while($#F>0){@b=join("/",@F);print "chmod +rx @b"; pop @F}' chmod +rx /root/subfolder1/subfolder2/subfolderN chmod +rx /root/subfolder1/subfolder2 chmod +rx /root/subfolder1 chmod +rx /root