11

find コマンドは、他の Unix コマンドとは異なるようです。

次のコマンドの最後に空の中括弧と後方フラッシュがあるのはなぜですか?

find * -perm 777 -exec chmod 770 {} \;

中括弧の理由の 1 つを見つけましたが、後方フラッシュの理由は見つかりませんでした。

中括弧は明らかにパス用です

-exec と同じですが、ユーティリティの呼び出しごとに ``{}'' ができるだけ多くのパス名に置き換えられる点が異なります

4

4 に答える 4

16

-exec コマンドの後には、見つかったファイルごとに実行されるコマンドを構成する任意の数の引数を続けることができます。最後の引数を識別する何らかの方法が必要です。これは何 \; します。-exec スイッチの後に他のことが続く場合があることに注意してください。

find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;

(これにより、euler ディレクトリ内のすべての c ファイルと python ファイルが検索されます。)

exec が完全なコマンドを引用符で囲む必要がない理由は、ほとんどの場合、コマンド内の多くの引用符をエスケープする必要があるためです。

于 2009-03-22T00:42:53.603 に答える
3

(エスケープされた) セミコロンが必要なのは、"find" が、exec されたプログラムへの引数がどこで終了するか (存在する場合)、および "find" への追加の引数が開始する場所を知ることができるようにするためです。

于 2009-03-22T00:44:19.807 に答える
1

代わりに次のようにすることをお勧めします

find . -perm 777 -print0 | xargs -0 chmod 770

「xargs」は、検索の結果を取得して、一度に 20 個ずつ次のコマンドにフィードするように指示します。

于 2009-03-22T00:44:27.997 に答える