我已经看到this answer关于使用stdout / stderr
将command 2>x 1>y
重定向到不同位置的信息。
但是,我对操纵stdout
部分感兴趣:
我要tar -xvzf
一个文件,计算输出文件,并将其存储在一个文件中,并将错误存储在另一个文件中。
第一次尝试:
tar -xvzf pkg.tgz 2>err 1>output
文件名本身保存在output
中(我没有使用wc -l
,但至少它给出了有意义的输出)
第二次尝试:
tar -xvzf pkg.tgz 2>err 1 | wc -l >output
tar:1:在存档中找不到
tar:由于先前的错误而以失败状态退出
如果出了什么问题(tar -xvzf
通常会解压缩文件并输出错误),如何获取提取的文件数或失败指示?
第三次尝试:
tar -xvzf pkg,tgz 2>err | wc -l > output
各种各样的作品,但我不确定...
我的问题是:我的第三次尝试合法吗?另外,是否有一种选择是重定向仅在文件中包含数据的情况下才创建文件(即如果stderr
没有文件,则不会创建任何err文件?)
答案 0 :(得分:1)
在这种情况下,tee
命令可以提供很多帮助。就像是道路或管道上的T型路口。 Tee接收std输入,将其发送到1个或多个文件,然后还输出至std输出,其中可能包含其他过滤器,例如wc
。
如果要在将内容保存到文件之前进行进一步操作,请在tee之前进行操作。如果只想对文件进行额外的操作,则在bash中,可以使用>(command)代替文件名。