Linux 将错误重定向到一个文件,将标准输出重定向到另一个函数,然后再重定向到另一个文件

Linux 将错误重定向到一个文件,将标准输出重定向到另一个函数,然后再重定向到另一个文件,linux,bash,Linux,Bash,我已经了解了如何使用命令2>x1>y将stdout/stderr重定向到不同的位置。 但是,我对操作stdout部分感兴趣: 我想要tar-xvzf一个文件,计算输出文件,并将其存储在一个文件中,将错误存储在另一个文件中 第一次尝试: tar -xvzf pkg.tgz 2>err 1>output tar -xvzf pkg.tgz 2>err 1 | wc -l >output tar -xvzf pkg,tgz 2>err | wc -l > out

我已经了解了如何使用
命令2>x1>y
stdout/stderr
重定向到不同的位置。 但是,我对操作
stdout
部分感兴趣:

我想要
tar-xvzf
一个文件,计算输出文件,并将其存储在一个文件中,将错误存储在另一个文件中

第一次尝试:

tar -xvzf pkg.tgz 2>err 1>output
tar -xvzf pkg.tgz 2>err 1 | wc -l >output
tar -xvzf pkg,tgz 2>err | wc -l > output
文件名本身保存在
output
(我没有使用
wc-l
,但至少它提供了一个有意义的输出)

第二次尝试:

tar -xvzf pkg.tgz 2>err 1>output
tar -xvzf pkg.tgz 2>err 1 | wc -l >output
tar -xvzf pkg,tgz 2>err | wc -l > output
tar:1:在存档中找不到

tar:由于以前的错误而以失败状态退出

如果出现错误,我如何获取提取的文件数或故障指示(tar-xvzf通常解压文件并输出错误)

第三次尝试:

tar -xvzf pkg.tgz 2>err 1>output
tar -xvzf pkg.tgz 2>err 1 | wc -l >output
tar -xvzf pkg,tgz 2>err | wc -l > output
有点效果,但我不确定


我的问题是:我的第三次尝试合法吗?此外,是否有一个选项,即重定向仅在文件中包含数据时才会创建文件(即,如果
stderr
没有任何内容,则不会创建错误文件?

在这种情况下,
tee
命令会有很大帮助。它就像道路或管道上的T形交叉口。Tee接收std输入,将其发送到一个或多个文件,然后还输出到std输出,std输出可能具有进一步的过滤器,例如
wc

如果要在将内容保存到文件之前对其执行进一步操作,请在T形三通之前执行。如果只想对文件进行额外的操作,那么在bash中,可以使用>(命令)而不是文件名