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 … -print -exec 'the stuff you want to do' | nl

バッファリングのために遅延した後、カウントが印刷されます。バラよりパイプラインでバッファリングをオフにするバッファリングがオフの場合。

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

関連情報