ファイルまたはフォルダにのみ再帰的なchmodを適用する

ファイルまたはフォルダにのみ再帰的なchmodを適用する

ファイルとフォルダにchmodを1行で適用したいのですが、

オリジナル:

chmod 700 ./* -R # but only apply to folders
chmod 600 ./* -R # but only apply to files

もちろん、Googleを検索してマニュアルページを読みました。

したがって、問題は欠点や危険がありますか?それとも、次は安全ですか?

find . -type f -print0 | xargs -0 chmod 600 && find . -type d -print0 | xargs -0 chmod 700

ベストアンサー1

私はACLを使って大文字Xという別の可能性があることを発見しました。次の構造を考えると(3つのディレクトリ、3つのファイル):

drw------- 1/
drw------- 2/
drw------- 3/
-rw------- 4
-rw------- 5
-rw------- 6

実行を設定できますが、ディレクトリ専用です。

chmod u+X *

結果は次のとおりです。

drwx------ 1/
drwx------ 2/
drwx------ 3/
-rw------- 4
-rw------- 5
-rw------- 6

findと比較すると、xargsコマンドが1つだけ必要なので、パイプが不要であるという利点があります。このため、私はこれがより速いと言いたいと思います。

あなたの例では、基本的に1行に2つのコマンドを使用しています。

  • まず、ファイルを検索して名前を印刷して、残りのxargs操作を実行します。
  • 2番目の検索ディレクトリも同じように動作します。

各呼び出しで3つを実行します。注文する:

  • 走るfindこれにより、関心のあるファイルの名前が印刷されます。
  • この名前を次に渡します。xargsだから包装紙として機能します。chmod(それで一度だけ呼び出されます。)

使用&&して注目する価値があります。find

ただし、find-exec)のみを使用している場合は、対応するchmod命令が呼び出されます。ファイルごと規格に準拠していますfind。ディレクトリに200個のファイルがある場合、chmod200回呼び出されます。これはchmod、200個のファイルに対して一度呼び出すよりも遅くなります。もちろん、最終的にはchmod比較的速くて軽い作業なので、適切なファイル数では違いを感じません。

最後に、プログラム間のファイル名の転送に関するもう1つの詳細は空白です。各コマンドがファイル名を処理する方法(正しい引用符を使用するかどうか)によっては、名前にスペースを含むファイルを処理するのに問題がある可能性があります。このスーパーイラスト。png次のようにすばやく処理できます。これ素晴らしいそして図.png)。

おすすめ記事