Можно ли по трубопроводу от stdin к gzip?

11

Если я запускаю команду, s3cmd get s3://bucket/file.gz -я получаю двоичный вывод на экране. Если я попытаюсь передать это gzip, s3cmd get s3://bucket/file.gz - | zcatя получу gzip: stdin: not in gzip format.

Как я могу получить zcatот него вход stdin?

KalenGi
источник

Ответы:

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