згортайте .gz файл і передайте його для декомпресії


13

Я намагаюся завантажити деякі .gzфайли (зверніть увагу не на .tar.gzті) із заданих URL-адрес і розпакувати їх, щоб перезаписати наявні файли, якщо такі є.

Для кожного завантаження я намагався:

curl -O $URL | gunzip -f

Однак, це не спрацювало , як він зазнав невдачі з: gzip: stdin: unexpected end of file. Я запустив серію цієї команди всередині сценарію bash shell.

Якщо я розбив команду на два явні кроки, тобто спочатку завантажте файл, а потім розпакуйте .gzфайл, він працює.

Чому трубопровідна версія не працює?


1
Ви впевнені, що curl -Oнасправді передається файл на стандартний вихід? Можливо, ви думаєте wget -O-?
steeldriver

@steeldriver ви повинні розмістити це як відповідь згортання | tar xz ...
Пантера

Є також --compressed, але це працює лише для стислих відповідей.
kenorb

Відповіді:


18

Труба (представлена |символом) посилає стандартний вихід одного процесу на стандартний вхід іншого. У вашому випадку вам здається, що ви хочете використовувати названий файл, тому труба не є підходящою - конкретно, нічого не потрібно передавати (отже, gunzipпомилка), оскільки віддалений вміст переходить у локальний файл. Натомість вам потрібно буде витягнути ім'я файлу - наприклад, з його URL-адреси - щось на кшталт (використовуючи вбудовані в bash можливості маніпулювання рядками)

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

Якщо ви хочете скористатися трубою, то спосіб зробити це буде щось на кшталт

curl "$URL" | gunzip -c

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


6

Під час завантаження виконайте переадресації. Іноді веб-сервер має приховані переадресації з безпеки та / або випадкових причин. Якщо ви не дотримуєтесь переадресації, неправильні дані завантажуються, а ваша програма, що читає дані, переплутається. Ви можете слідувати за перенаправленнями з завитком, використовуючи прапор -L.

curl -L https://example.com/mygzip.tar.gz | tar zxv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.