我想将给定命令(rsync
)的一些过滤输出写入文件,但在stdout(屏幕/终端)上保留完整的未过滤输出。
我已尝试过sed
,tee
&的某些组合。 process substitution
但无法使其发挥作用。
这是我到目前为止所得到的:
rsync -aAXz --stats -v src dest > >(sed '0,/^$/d' | tee -a "summary.log")
sed '0,/^$/d'
删除第一个空白行之前的所有内容,该行留下rsync
的摘要并删除前导详细输出。这是按预期工作的,只会将摘要打印到summary.log
。
显然它也会删除stdout
的详细输出,因为tee
命令只接收管道上的过滤后的sed
输出。
如何在使用stdout
过滤之前写入sed
以查看屏幕/终端上的所有详细输出?
答案 0 :(得分:0)
要将stdout
的完整输出写入日志文件,请先执行此操作(使用tee
),然后再处理终端。像这样:
rsync -aAXz --stats -v src dest | tee -a "summary.log" | sed '0,/^$/d'
“拆分”或复制输出流,整个流的一个副本由tee
转移到输出日志,另一个副本发送到其stdout
,这将成为输入到sed
....