如果我运行该命令,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
。或者正确下载并进行比较。