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


12

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

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

Answers:


17

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。或正确下载并进行比较。


我认为您的s3cmd输出是正确的。我改变了方法,改为使用curl
KalenGi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.