web-dev-qa-db-ja.com

ファイルのアクセス許可を再帰的に変更しますが、ディレクトリは変更しませんか?

私は、UNIXシステムに移行したいくつかのファイルのアクセス権を大量に再帰的に変更していました。それらをug + rwに変更しましたが、サブディレクトリをトラバースできないことがわかりました。私はchmodのmanページを見て、ディレクトリを除外するための説明を何も見なかったので、少しグーグルすると、人々がfindを使用してディレクトリの権限を再帰的に「実行」に変更することがわかりました'ユーザーとグループ。私はそれをしましたそしてそれから私はそれらを調査することができました。

しかし、私はこれをchmodで実行できるようにすべきだと思いました-再帰的にファイルを読み取り/書き込みに変更しますが、ディレクトリを通過できないようにします。これを「正しい」方法で行ったか、それを行う簡単な方法はありますか?

13
user394

より良い解決策は

chmod -R ug=rwX,o=rX /path

大文字のXは、次の場合に実行ビットを設定します。

ファイルはディレクトリであるか、すでに一部のユーザーの実行権限を持っています

chmod manページから引用)。

または、findを使用する場合

find /path \( -type f -exec chmod ug=rw,o=r   {} + \) -o \
           \( -type d -exec chmod ug=rwx,o=rx {} + \)
12
enzotib

バリエーションはありますが、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つは、最大値(多くの場合10)に達するまで内部コマンドラインの最後にファイルを追加することにより、chmodへの呼び出し回数を減らし、次にコマンドを呼び出して新しいコマンドの再構築を開始します。最後のステートメントは、ファイルごとに新しいプロセスを生成するため、効率が低下します。

3
Arcege