使用 cat 和 from pipeline 的 gzip 文件会给出不同的结果

使用 cat 和 from pipeline 的 gzip 文件会给出不同的结果

为什么会给出这样的输出(两个命令都应该做同样的事情)以及如何使它们给出相同的输出?

diff <(cat some_file | gzip -c - | base64) <(gzip -c some_file | base64)
1,2c1,2
< H4sIACSOZFUAA2XNsRHAMAgDwDqZRkIQ8P6L+c5xnIL2m2c5E6BdIQA5cHPTaGTqlI3ki2jSoWrk
< e1Tw0PNSMT4KdPKfJgNiJT++AAAA
---
> H4sICGcqSlUAA2Z0X2FkLnNob3J0AGXNsRHAMAgDwDqZRkIQ8P6L+c5xnIL2m2c5E6BdIQA5cHPT
> aGTqlI3ki2jSoWrke1Tw0PNSMT4KdPKfJgNiJT++AAAA

该文件的内容是:

184170012   53000790
184170019   53000790
184170023   53000790
184170027   53000790
184170034   53001233
184170038   53001233
184170042   53000351
184170046   53000815
184170050   53000815
184170054   53000815

tab两列之间和new line每行末尾都有一个字符。

答案1

gzip 将输入文件的文件名编码到其输出中。即使有-c选项它也会这样做。您可以使用 来查看这一点gzip -c some_file | strings|head -1。但是,当读取 时stdin,gzip 不会这样做,因为它不知道文件名。您可以告诉 gzip 从输出中省略文件名和时间戳-n

相关内容