ディレクトリを再帰的に調べ、ファイルタイプの条件に基づいて chmodding を実行するシェル スクリプト

ディレクトリを再帰的に調べ、ファイルタイプの条件に基づいて chmodding を実行するシェル スクリプト

ディレクトリ構造全体を再帰的に処理できる (現在の作業ディレクトリから開始するか、開始場所を指定する必須引数を指定) シェル スクリプトを作成するためのコードまたはチュートリアルを教えていただけますか。次の操作を実行できます。

  1. 項目がディレクトリであるかどうかを判別し、ディレクトリである場合は、chmod 755...
  2. アイテムがファイル(ディレクトリではない)であるかどうかを判断しますchmod 644

私は Ubuntu、Debian、RHEL ベースなどとの互換性を求めているので、特定の言語でタグ付けしていません。私はこれを Bash で使いたいのですが、ZSH スクリプトがあればそれも動作します。

答え1

私はこの1行のコマンドに慣れています(現在の作業ディレクトリから再帰的に実行されます)

find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +

説明:

find .                    # starting in curdir find   
-type d                   # any directory
-exec chmod 0755 '{}'     # and chmod it to 755
+                         # (variant of -exec look find man page)
-or                       # or
-type f                   # any file
-exec chmod 0644 '{}'     # and chmod it to 644
+                         # (as above)

答え2

簡単な答え:

chmod -R a+rX .

+X(大文字の X に注意) は、あるユーザーにすでに実行権限がある場合に、実行権限を与えることを意味します。所有者に適切な権限が付与されているディレクトリ ツリーがあり、それをすべてのユーザーがアクセスできるようにする場合は、このコマンドを使用するのが適切です。このコマンドは、ディレクトリを誰でも実行可能にするだけでなく、実行可能ファイルも実行可能にします。

書き込み権限を所有者のみにリセットし、setuid/setgidビットをクリアしたい場合は、

chmod -R a-ws,u+w,a+rX .

どのファイルも実行可能にしたくない場合は、必須の zsh 2 行コードを使用します。

chmod 755 **/*(/)
chmod 644 **/*(.)

関連情報