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ではない終了ステートを返した場合、find0ではない終了ステートを返します。find はエラーに出くわすと即座に終了し、残りのコマンドがまったく実行されない場合があります。

このタイプの -exec オプションは常に true を返します。

上記のサンプルによれば、コマンドの実行結果は以下のようになります。

$ find . -type f -exec echo {} +
./fileb ./filea ./filec

 

 
Share this...
カテゴリー: Linuxコマンド

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

Avatar placeholder

メールアドレスが公開されることはありません。