завихритесь .gz файл и канал это для распаковки

Я пытаюсь загрузить некоторых .gz файлы (N.B. нет .tar.gz ) от данных URL и распаковывают их для перезаписи существующих файлов, если таковые имеются.

Для каждой отдельной загрузки я попробовал следующее:

curl -O $URL | gunzip -f

Однако это не работало, поскольку это перестало работать с: gzip: stdin: unexpected end of file. Я выполнил ряд этой команды в сценарии оболочки удара.

Если я пролил команду в два явных шага, т.е. сначала загрузите файл и затем распакуйте .gz файл, это работает.

Почему переданная по каналу версия не работает?

13
задан 18 October 2014 в 20:52

3 ответа

Канал (представленный | символ), отправляет стандартный вывод одного процесса к стандартному входу другого. В Вашем случае Вы, кажется, хотите использовать именованный файл, таким образом, канал не является соответствующим - а именно, нет ничего для передачи по каналу (следовательно gunzip ошибка), потому что удаленное содержание идет в локальный файл. Вместо этого необходимо было бы извлечь название файла - например, от его URL - что-то как (использование удара создало в возможностях обработки строк),

curl -O "$URL" && gunzip -f "${URL##*/}"

Если Вы хотите использовать канал, то способ сделать это был бы чем-то как

curl "$URL" | gunzip -c

(без -O опция) так, чтобы curl передает удаленное содержание потоком к stdout от того, где это может быть передано по каналу в gunzip, но затем необходимо было бы перенаправить gunzip вывод для перезаписи цели распаковал файл как соответствующий.

18
ответ дан 16 November 2019 в 14:01

Следуйте за перенаправлениями при загрузке. Иногда веб-сервер скрывал перенаправления для безопасности и/или случайных причин. Если Вы не следуете за перенаправлением, неправильные данные загружаются, и Ваше приложение, считывающее переданные по каналу данные, запутывается. Можно следовать за перенаправлениями с завихрением с помощью флага-L.

curl -L https://example.com/mygzip.tar.gz | tar zxv
5
ответ дан 16 November 2019 в 14:01

Следующее выполняет 3 действия

    mkdir -p ${DIR} && curl -L http://apachemirror.wuchna.com/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz | tar zxv -C ${DIR} --strip-components 1
  1. Принудительно создает каталог назначения
  2. Разархивирует архив в указанный каталог
  3. Заменяет корневой каталог заданным именем каталога, просто удаляя корневой каталог архива.
0
ответ дан 22 March 2020 в 19:30

Другие вопросы по тегам:

Похожие вопросы: