find内の変数を印刷して更新する

find内の変数を印刷して更新する

コマンドを実行しfindて返されるファイルを処理するだけでなく、進行状況を把握できるように、処理されたファイルの数もエコーしたいと思っています。

現時点での私のコマンドは次のとおりです (例として):

COUNT=0\; find . -name '*.*' -exec echo "$COUNT: \c" \; -exec echo {} \;

しかし、結果として、カウントがエコーされません (また、カウントを増やす方法がわかりません)。次のような結果が返されるようにしたいと思います。

0: ./FileOne.txt
1: ./FileTwo.txt
...
205: ./FileTwoHundredAndFive.txt

答え1

によって実行されるコマンドはfind独立しています。それぞれが-exec新しいコマンドを開始します。現在のカウントを 1 つのコマンドから次のコマンドに転送する方法はありません。転送するには、どこか (ファイル内) に保存するしかありませんが、これは非常に時間がかかります。

find にファイルを見つけるたびに何かを印刷させ、その出力を入力行をカウントするプログラムにパイプさせることができます。

find … -print -exec 'the stuff you want to do' | nl

バッファリングによる遅延の後にカウントを出力します。パイプ内のバッファリングをオフにするバッファリングをオフにします。

stdbuf -oL -eL find … -print -exec 'the stuff you want to do' | nl

関連情報