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

标签 linux bash

我看过 this answer关于使用 command 2>x 1>ystdout/stderr 重定向到不同的地方。 但是,我对操作 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: Not found in archive

tar: Exiting with failure status due to previous errors

如果出现问题(tar -xvzf 通常会解压缩文件并输出错误),我如何获取提取的文件数或失败指示?

第三次尝试:

tar -xvzf pkg,tgz 2>err | wc -l > output

有点效果,但我不确定...

我的问题是:我的第 3 次尝试是否合法?此外,是否有一个选项,即只有在文件中有数据时,重定向才会创建文件(即,如果 stderr 什么都没有,则不会创建错误文件?)

最佳答案

tee 命令在这种情况下可以提供很多帮助。它就像道路或管道上的 T 形接头。 Tee 获取 std 输入,将其发送到 1 个或多个文件,然后也输出到 std 输出,它可能有进一步的过滤器,例如 wc

如果您想在将内容保存到文件之前对其进行进一步操作,请在发球区之前进行。如果你只想对文件做额外的操作,那么在 bash 中,你可以使用 >(command) 而不是文件名。

关于linux - 将错误重定向到一个文件,将标准输出重定向到另一个函数,然后再重定向到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52813608/

相关文章:

java - 将命令行输出写入文本文件

linux - 如何静态链接使用./configure的Linux软件?

php - 从源代码编译 PHP 后还需要开发库吗?

linux - 接收特定服务的 TCP 设置的建议

bash - 将多个文件汇总为 1 个输出文件

linux - 使用 bash、awk 或 sed 将 CSV 文件模板化为 SQL 文件

linux - 匹配两个文件的内容

windows - 如何将 bash 脚本输出通过管道传输到 Windows 上的文件

ubuntu - 找不到命令 'ember'

linux - epoll_wait() 无限返回 EINTR