UNIXシステムに移行する一部のファイルに対する権限を大規模に繰り返し変更しています。 ug + rwに変更しましたが、サブディレクトリを参照できないことがわかりました。マニュアルページを見ましたが、chmod
ディレクトリの除外についての説明がなかったので、グーグルをしてみると、人々がfind
ユーザーとグループに対して「実行」するためにディレクトリ権限を繰り返し変更したことがわかりました。私はそうし、その後それらを調べることができました。
しかし、私はビューでこれを行うことができるはずですchmod
。ディレクトリを閲覧できないようにするのではなく、ファイルを読み取り/書き込みに再帰的に変更することです。私はこれを「正しい」方法で実行していますか、それとも簡単な方法がありますか?
答え1
より良い解決策は
chmod -R ug=rwX,o=rX /path
大文字X
の意味は次のとおりです。
ファイルがディレクトリであるか、すでに一部のユーザーに対する実行権限があります。
chmod
(マンページから引用)。
または使用したい場合find
find /path \( -type f -exec chmod ug=rw,o=r {} + \) -o \
\( -type d -exec chmod ug=rwx,o=rx {} + \)
答え2
findを使用するのは「正しい」方法であり、プログラムでこれを行う唯一の方法ですが、いくつかのバリエーションがあります。
find . -type f -exec chmod ug+rw {} + # "+" may not be on all systems
または
find . -type f -print0 | xargs -r0 chmod ug+rw # similar to the -exec + functionality
または最も遅い:
find . -type f -exec chmod ug+rw {} \; # in case xargs is not installed
これらのそれぞれは、ファイル(ディレクトリやシンボリックリンクではなく)を選択し、chmod
そのファイルにコマンドを適用します。最初の2つの方法は、chmod
最大値(通常10個)に達するまで、毎回内部コマンドラインの末尾にファイルを追加して呼び出しの数を減らし、コマンドを呼び出して新しいコマンドの再構築を開始します。最後のステートメントはファイルごとに新しいプロセスを作成するため、効率が悪くなります。