フォルダとすべての親ディレクトリの読み取りおよび書き込み権限の設定

フォルダとすべての親ディレクトリの読み取りおよび書き込み権限の設定

rootsubfolderNまで、ディレクトリとすべての親フォルダに対するユーザーの読み取りおよび書き込み権限を設定する必要があります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

、、、、、またはcshtcshkshzshbashfishyash -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 +rxumaskこれを含まないと、ディレクトリを誰でも読み取ってアクセスできるように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}' 

これが何をしているかを見るには、呼び出しをchmodprintに置き換えます。

$ 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

関連情報