如果当前命令已通过 gzip 传送,如何将标准输出传送到文件

如果当前命令已通过 gzip 传送,如何将标准输出传送到文件

所以我需要运行这个命令然后否认:

innobackupex-1.5.1 --user=root --password=**** --stream=tar ./ | gzip - > /data/myfile.tar.gz

如何将任何输出传送到文件?

在此命令末尾添加另一个 >> 只会附加 gzip 数据。

更具体; innobackupex 有进度输出 - 我希望将此输出附加/通过管道传输到文件(不仅仅是错误)。在这种情况下,由于 gzip 已经通过管道传输,执行此操作的正常方法(通过添加 >>)将不起作用

答案1

innobackupex不会输出其进度stdout,否则,它将最终出现在tar.gz文件中。最有可能的是,它会将其输出到 stderr(快速浏览一下脚本似乎可以确认这一点),因此您需要做的是重定向其 stderr:

innobackupex ... 2>> progress.log | gzip > file.tar.gz

答案2

您的意思是从 innobackupex 捕获 STDERR 吗?你的问题不是很清楚。

innobackupex-1.5.1 --user=root --password=**** --stream=tar ./ 2> /path/to/file | gzip - > ... 

答案3

我将通过在子 shell 中运行这些命令来完成此操作

( innobackupex-1.5.1 --user=root --password=**** --stream=tar ./ \
   | gzip - >  /data/myfile.tar.gz ) 2> errors

答案4

1)如果您的意思是,您想将输出通过管道传输到 gzip 进行压缩和常规文件,下面是一个用法示例tee

ls -a ~ | tee ls.txt - | grep "^\."

这将打印您的主目录中的所有“隐藏”点文件(因为 grep),但整个输出ls -a将在 ls.txt 中。

请参阅man tee以获得完整的解释。

2) 如果您的意思是要将标准错误流包含在标准输出流中,请附加2>&1到命令中。

相关内容