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
표준 출력 및 파일로 보낼 수 있습니다. 귀하의 예에서는 두 출력을 모두 표준 출력(이 경우 파이프)으로 보냅니다. 이 문제를 해결하는 한 가지 방법은 명명된 파이프를 사용하여 출력을 캡처하는 것입니다.
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'