是否可以通过管道从 stdin 传输到 gzip?

是否可以通过管道从 stdin 传输到 gzip?

如果我运行该命令,s3cmd get s3://bucket/file.gz -屏幕上会显示二进制输出。如果我尝试使用管道将其传输到 gzip,则会s3cmd get s3://bucket/file.gz - | zcat显示gzip: stdin: not in gzip format

我怎样才能zcat从中选择它的输入stdin

答案1

gzip及其辅助命令默认都从 STDIN 读取。我们可以用一个非常简单的测试来测试这一点:

$ echo testing | gzip | zcat
testing

或者一些更奇特的事情来证明这不是侥幸:

$ dd if=/dev/urandom of=bigfile bs=1024 count=102400
102400+0 records in
102400+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 6.42114 s, 16.3 MB/s

$ sha1sum bigfile 
25b4832d3e738e70721d86695ea7a767a3afb229  bigfile

$ cat bigfile | gzip | zcat | sha1sum 
25b4832d3e738e70721d86695ea7a767a3afb229  -

在我看来,这表明您的s3cmd输出在某种程度上很脏或格式不正确。尝试重定向到文件(而不是提供实际文件名),然后以类似 的方式查看输出head。或者正确下载并进行比较。

相关内容