存档验证 `gzip -v -t` 将成功打印到 stderr 或者我做错了什么?

存档验证 `gzip -v -t` 将成功打印到 stderr 或者我做错了什么?

我想将 gzip 文件验证添加到我的备份脚本中。

我的备份脚本为 stdout 和 stderr 创建日志,如下所示:

scp -i $BCKIDENTITYFILE $BCKLOG "$BCKREMOTEUSER"@"$BCKHOST":$BCKREMOTEDIR 2>> $BCKERRLOG 1>> $BCKLOG

当我测试这个时:

# this prints OK to error.log, nothing to output.log
gzip -v -t existingfile.sql.gz 2>> error.log 1>> output.log 

# prints missing file message to error.log, nothing to output.log
gzip -v -t notexistingfile.sql.gz 2>> error.log 1>> output.log 

我做错了什么?

答案1

看起来问题在于您将标准错误 2>> (2>>) 和标准输出 (1>>) 流重定向到单独的日志文件,但 gzip 正在将状态信息和错误消息写入标准错误流。

当您运行命令 gzip -v -t Existingfile.sql.gz 时,-v 选项会使 gzip 打印有关压缩文件的附加信息,例如文件名、其原始大小和压缩大小以及压缩率。此信息将写入标准错误流,该流将被重定向到脚本中的 error.log 文件。

当文件不存在时,消息“gzip:notexistingfile.sql.gz:没有这样的文件或目录”也会发送到标准错误流,该流被重定向到error.log

要解决此问题,您可以将标准错误和标准输出流重定向到同一文件,以便状态信息和错误消息都写入到output.log文件中:

gzip -v -t现有文件.sql.gz &>> output.log 这会将标准错误和标准输出重定向到文件output.log,这样您就可以在一个文件中看到gzip验证的结果。

或者,您也可以将标准错误重定向到标准输出,然后将标准输出重定向到 output.log 文件,如下所示:

gzip -v -t 现有文件.sql.gz 2>

相关内容