100を超えるrarファイルがありますが、exec
findコマンドを使用して抽出したいと思います。進捗状況を監視し、出力をパイプしてから、パイプを介してgrep
" wc
All OK"行(アーカイブが正常に抽出されたらrarが印刷する)を計算できるように、一般的なrar出力を見たいと思います。
2つのrarアーカイブを見つけるように設計された次のコマンド(最後のコンポーネントなし)でテストしwc -l
ましたが、「all OK」という4行と抽出された2つのrarアーカイブに対してそれぞれ2行だけ印刷します。
$ find -iname 'TestNum*.rar' -execdir rar e '{}' \; | tee - | grep -i 'All OK'
All OK
All OK
All OK
All OK
Note: 2 archives extracted, but 4 'All OK' lines, and none of rar's output.
私が望むのはこれです:
$ find -iname 'TestNum*.rar' -execdir rar e '{}' \; | ... ???
Extracting from TestNum1.rar
All OK
Extracting from TestNum2.rar
All OK
2
最後の行では、wc -l
「All OK」の実際の一致数を表示する2つだけを出力します。
可能ですか?ありがとうございます。
編集@ 2018-04-25 19:21
私は次のことを行うことができ、うまく機能することに気づきました。
find . -iname 'TestNum*.rar' -execdir rar e '{}' \; | tee rar_out
grep -i 'All OK' rar_out | wc -l
まだ興味がないので元々は可能でしょうか?
答え1
tee
標準出力とファイルに送信できます。あなたの例では、両方の出力を標準出力(この場合はパイプ)に送信します。この問題を解決する1つの方法は、名前付きパイプを使用して出力をキャプチャすることです。
mkfifo p
cat p & # this blocks until something is written to p
find -iname 'TestNum*.rar' -execdir rar e '{}' \; | tee p | grep -c 'All OK'