chmod
次のフォルダとファイルを使用しようとしています。
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
しかし、私は知りたいです:
find
ディレクトリを使用して除外する方法.
と1行..
どのアプローチが優れています
find -exec
かxargs
?
答え1
使うのかfind
、xargs
強制するのか?
それ以外の場合は、次のものを使用できます。
chmod -R u=rwX,go=rX *
答え2
chmodで指定された引数を使用してこれを実行できます。
chmod u=rwX,go=rX {}
ここで重要な部分は大文字X
です。ディレクトリの場合のみ、権限を実行可能ファイルに変更してください。バラよりマニュアルページ詳細については。
答え3
find . -type d -exec chmod 755 {} + -or -type f -exec chmod 644 {} +
find ... -exec ... +
似ていますが、find ... -exec ... \;
一致するファイルの大きなセットの各々に対してコマンドが一度だけ実行される点だけが異なります。
昔は、一度find OPTIONS... -exec COMMAND... \;
に1つのファイルだけを操作する必要がありました。したがって、xargs
効率を高めるためにタスクをグループ化するように設計されています。しかし、xargs
独自の問題があります。つまり、生成できない方法で参照される入力を期待しますfind
。find OPTIONS... | xargs COMMAND...
ファイル名にスペースやスペースが含まれていないことがわからない場合、'"\
これは役に立ちません。
その後、GNUが発明され、find OPTIONS... -print0 | xargs -0 COMMAND...
ファイル名に任意の文字が表示されるようになりました。しかし、他の人がそれを採用するのに長い時間がかかり、その間、Sun(私の考えでは)はfind OPTIONS... -exec COMMAND... +
グループ化と同じことをしますxargs
が、複雑さは追加されません(長いコマンドライン、コマンドごとに1つに制限find
)、それを発明しました。今find ... -exec ... +
標準(現在シングルUnix v3)とxargs -0
。以前のLinuxシステムとの互換性を維持する必要がない場合は、忘れてくださいxargs
。
答え4
Sherlock got(1), for(2)xargs
は、より合理的な構文と、より少ないシェル呼び出しのオーバーヘッドを許容するため、一般的に好まれます。スペースと特殊文字を含むパスは問題を引き起こす可能性があるため、findとxargsの-print0
オプションに注意してください。-0
ワンタイム実行の場合、巨大なツリーを変更しない限り、違いは実際には重要ではありません。スクリプトでフォーマットするためにこれを頻繁に実行する場合は、xargsを使用してください。