在 gzip 中使用“--stdout”和不使用它有什么区别?

what is the difference between using "--stdout" and not using it in gzip?

下面是让我对gzip--stdout感到好奇的代码。在两个不同命令的输出上使用 diff 命令告诉我这两个文件不同,但手动检查却另有说明。这是怎么回事?

$echo "test" > tmpx
$cat tmpx | gzip > tmpx1.gz
$cat tmpx | gzip --stdout > tmpx2.gz

$diff tmpx1.gz tmpx2.gz
Binary files tmpx1.gz and tmpx2.gz differ

$zcat tmpx1.gz
test

$zcat tmpx2.gz
test

$cat tmpx1.gz
a▒U+I-.▒▒5▒; 

$cat tmpx2.gz
?▒U+I-.▒▒5▒; 

压缩数据没有区别

您看到的是文件的第 4-8 字节有所不同。这包含创建 gzip 文件时的 unix 时间戳。

添加到 Terrence 的正确答案中,没有区别,。当您将输入通过管道传输到 gzip 时,它会自动将其输出发送到标准输出,无论您是否指定 --stdout.

正如 Terrence 指出的,区别仅在于时间戳。如果您至少在两秒后执行 cat tmpx | gzip > tmpx1.gzcat tmpx | gzip > tmpx2.gz,那么您会发现生成的文件会因时间戳而有所不同。