Linuxコマンドの覚書(自分用)です。
find
コマンドのコマンド実行オプション-exec command ;
と-exec command +
の違いについて。
-exec command {} \;
find
でマッチしたファイルに対して command
を実行します。コマンドの終了ステータスが0で返された場合、true を返します。
あとに続く引数は、;
に出会うまではそのコマンドの引数として扱われます。
{}
の文字列は、コマンドの引数の中で出現するごとに、現在処理されているファイル名に置き換えられます(find のバージョンによっては、単独でしか使用できない場合もあるみたいです)。
この2つの構文は、シェルによる展開から保護するために、\
でエスケープするか、引用符で囲む必要があるかもしれません。
指定されたコマンドは、マッチしたファイルに対して一度だけ実行されます。また、コマンドは開始されたディレクトリ内で実行されます。
$ ls
filea fileb filec
とした場合、
$ find . -type f -exec echo {} \;
./fileb
./filea
./filec
となります。
\;
となっているのは、コマンドの区切り記号”:
”として処理されないようにエスケープしています。
-exec command {} +
find
でマッチしたファイルに対して command
を実行しますが、コマンドの後ろにマッチした各ファイルを追加することでコマンドラインを構築します。
コマンド中に使う {}
は一つしか許可されません。
また、find
コマンドをシェルから起動した場合は、シェルによる展開から保護するために `{}`
のように引用符で囲む必要があります。
コマンドは開始ディレクトリで実行されます。
+
形式での実行が 0
ではない終了ステートを返した場合、find
は 0
ではない終了ステートを返します。find
はエラーに出くわすと即座に終了し、残りのコマンドがまったく実行されない場合があります。
このタイプの -exec
オプションは常に true
を返します。
上記のサンプルによれば、コマンドの実行結果は以下のようになります。
$ find . -type f -exec echo {} +
./fileb ./filea ./filec
0件のコメント