{}
が実際に何をし、このコマンドでどのように機能するかを知りたいです。
find .-type f ! -name '*.c' -exec rm {} +
からman find
:
-実行コマンド;
コマンドを実行します。0 ステータスが返される場合は true。以降の find の引数はすべて、「;」で構成される引数まで、コマンドの引数と見なされます。遭遇します。文字列 '{}' は、find の一部のバージョンのように単独である引数だけでなく、コマンドの引数に出現するすべての場所で処理中の現在のファイル名に置き換えられます。これらの構造は両方とも、シェルによる展開から保護するために ('\' で) エスケープするか、引用符で囲む必要がある場合があります。
と
-exec コマンド {} +
-exec アクションのこのバリアントは、選択されたファイルに対して指定されたコマンドを実行しますが、コマンド ラインは、選択された各ファイル名を最後に追加することによって構築されます。コマンドの呼び出しの総数は、一致したファイルの数よりもはるかに少なくなります。コマンド ラインは、xargs がコマンド ラインを構築するのとほぼ同じ方法で構築されます。コマンド内で使用できる `{}' のインスタンスは 1 つだけです。コマンドは開始ディレクトリで実行されます。
したがって、find
コマンドの結果を実行時の引数として使用しますrm
。
次に、完全なコマンド
find .-type f ! -name '*.c' -exec rm {} +
現在のディレクトリ構造でファイルを探します。名前が で終わらないものと一致し.c
ます。すべての結果に対してrm
コマンドが実行されるため、*.c
ファイル以外はすべて削除されます。
$ find . -type f
./two/three
./something
$ find . -type f -exec ls -ltr {} +
-rw-rw-r-- 1 me me 0 Sep 30 11:37 ./something
-rw-r--r-- 1 me me 0 Nov 1 17:50 ./two/three