我有 100 多个 rar 文件,我想使用 findexec
命令提取它们。我希望看到通常的 rar 输出,以便我可以监视其进度,并将输出通过管道传输到grep
,然后通过wc
管道计算“All OK”行(如果成功提取存档,则 rar 会打印该行)。
我使用以下命令(没有最后的wc -l
组件)进行了测试,该命令旨在查找 2 个 rar 存档,但仅打印 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
最后一行仅输出 2 wc -l
,显示“All OK”的实际匹配数。
这可能吗?谢谢。
编辑 @ 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'