
ファイルとフォルダに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個のファイルがある場合、chmod
200回呼び出されます。これはchmod
、200個のファイルに対して一度呼び出すよりも遅くなります。もちろん、最終的にはchmod
比較的速くて軽い作業なので、適切なファイル数では違いを感じません。
最後に、プログラム間のファイル名の転送に関するもう1つの詳細は空白です。各コマンドがファイル名を処理する方法(正しい引用符を使用するかどうか)によっては、名前にスペースを含むファイルを処理するのに問題がある可能性があります。このスーパーイラスト。png次のようにすばやく処理できます。これ、素晴らしいそして図.png)。