Eu tenho mais de 100 arquivos rar que desejo extrair usando o exec
comando find. Eu gostaria de ver a saída usual do rar para que eu possa monitorar seu progresso e também canalizar a saída para grep
e depois wc
contar as linhas 'All OK' (que o rar imprime se um arquivo for extraído com sucesso).
Eu testei com o seguinte comando (sem o wc -l
componente final), que foi projetado para encontrar 2 arquivos rar, mas que simplesmente imprimiu 4 linhas 'All OK', 2 para cada um dos 2 arquivos rar que foram extraídos.
$ 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.
O que eu queria era algo como:
$ find -iname 'TestNum*.rar' -execdir rar e '{}' \; | ... ???
Extracting from TestNum1.rar
All OK
Extracting from TestNum2.rar
All OK
2
A linha final com apenas 2 sendo a wc -l
saída, mostrando o número real de correspondências de 'All OK'.
Isso é possível? Obrigado.
EDITAR @ 2018-04-25 19:21
Acabei de perceber que poderia fazer o seguinte, que funciona bem:
find . -iname 'TestNum*.rar' -execdir rar e '{}' \; | tee rar_out
grep -i 'All OK' rar_out | wc -l
Ainda sem interesse, o que perguntei originalmente é possível?
tee
pode enviar para stdout e para um arquivo. No seu exemplo, você envia ambas as saídas para stdout (que neste caso é o pipe). Uma maneira de contornar isso é usar um pipe nomeado para capturar a saída: