特定のディレクトリにあるすべてのファイルとサブディレクトリに755権限を設定したいのですが、755権限を持たないコンポーネントに対してのみchmod 755を実行したいと思います。
find /main_directory/ -exec chmod 755 {} \;
find
コマンドが長いリストを返す場合、これには長い時間がかかります。 statコマンドを使用して各コンポーネントのOctalファイルレベルのアクセス許可を確認し、if-elseを使用してファイルのアクセス許可を切り替えることができることはわかっていますが、find
およびxargs
最初にファイル/ディレクトリの権限を確認し、次にchmod
を使用して、他に設定されている場合は755に変更します。
ファイルとディレクトリの両方で755
へのアクセス許可を変更する場合、find
を使用するメリットはありません(少なくともパフォーマンスの観点から)。
chmod -R 755 /main_directory
本当にfind
を使用して、すでに755
権限を持つものに対する権限の変更を回避したい場合(ctimeタイムスタンプの更新を回避するため)、各ディレクトリとファイルの現在の権限もテストする必要があります:
find /main_directory ! -perm 0755 -exec chmod 755 {} +
-exec ... {} +
は、! -perm 0755
テストに合格したパス名をできるだけ多く収集し、それらすべてに対して一度にchmod
を実行します。
通常、ファイルとディレクトリの権限を個別に変更して、すべてのファイルが実行可能になるとは限らないようにします。
find /main_directory -type d ! -perm 0755 -exec chmod 755 {} +
find /main_directory ! -type d ! -perm 0644 -exec chmod 644 {} +
find
が-exec ... +
構文、xargs
を使用する意味はあまりありませんが、必要に応じて次のようにします。
find /main_directory -not -perm 0755 | xargs chmod 755