root
subfolderN
まで、ディレクトリとすべての親フォルダに対するユーザーの読み取りおよび書き込み権限を設定する必要がありますroot
。
私はそれを手ですることができます:
$ sudo chmod +rx /root/subfolder1/subfolder2/subfolderN
$ sudo chmod +rx /root/subfolder1/subfolder2
$ sudo chmod +rx /root/subfolder1
$ sudo chmod +rx /root
でも大きければN
飽きます。 1つのコマンドでこれを自動化する方法は?
答え1
これは、サブディレクトリから始めて上に移動しながらシェルで簡単に実行できます。
f=/root/subfolder1/subfolder2/subfolderN
while [[ $f != / ]]; do chmod +rx "$f"; f=$(dirname "$f"); done;
これは、設定したファイル/ディレクトリから始まり、「/」(またはループ条件で設定した文字列)に遭遇するまで、各親ディレクトリで機能します。 "/"をchmodしません。f
ループ条件とディレクトリが絶対パスであることを確認してください。
答え2
、、、、、またはcsh
:tcsh
ksh
zsh
bash
fish
yash -o braceexpand
sudo chmod +rx /root{,/subfolder1{,/subfolder2{,/subfolderN}}}
そしてzsh
:
f=/root/subfolder1/subfolder2/subfolderN
until [[ $f = / ]] {chmod +rx $f; f=$f:h;}
または、次のようにglob修飾子関数を定義できます。
explode() {
reply=()
until [[ $REPLY = [./] ]] {
reply+=$REPLY
REPLY=$REPLY:h
}
}
たとえば、次のように使用されます。
$ echo chmod +rx subfolder1/subfolder2/subfolderN(+explode)
chmod +rx subfolder1 subfolder1/subfolder2 subfolder1/subfolder2/subfolderN
umaskの影響を受けることに注意してくださいchmod +rx
。umask
これを含まないと、ディレクトリを誰でも読み取ってアクセスできるように007
なります。これは悪い考えです。一般的にスーパーユーザーには個人的なものなので公開するのは良いことではありません。/root
/root
答え3
何をしたいのかわかりませんが、それがあなたよりも優れています。再帰を過小評価しないでください。。つまり、実際の答えを読んでください。
うーん…再帰を使うとどうですか?
sudo chmod -R +rx /root
あるいは、気に入らない場合は、複数のchmod
ディレクトリを提供できます。
sudo chamod +rx /root /root/subfolder1 /root/subfolder1/subfolder2 /root/subfolder1/subfolder2/subfolderN
答え4
さて、次のように少し複雑な作業を行うことができます。
echo "/root/subfolder1/subfolder2/subfolderN" |
perl -anF'/' -e 'while($#F>0){@b=join("/",@F);`chmod +rx @b`; pop @F}'
これが何をしているかを見るには、呼び出しをchmod
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