ファイルの権限を繰り返し変更しますが、ディレクトリは変更しませんか?

ファイルの権限を繰り返し変更しますが、ディレクトリは変更しませんか?

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個)に達するまで、毎回内部コマンドラインの末尾にファイルを追加して呼び出しの数を減らし、コマンドを呼び出して新しいコマンドの再構築を開始します。最後のステートメントはファイルごとに新しいプロセスを作成するため、効率が悪くなります。

関連情報