Как скачать архив и распаковать его без сохранения архива на диск?


62

Я хотел бы скачать и распаковать архив по заданному каталогу. Вот как я это делал до сих пор:

wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2

Вместо этого я хотел бы скачать и распаковать архив на лету , без записи tar.gzна диск. Я думаю , что это возможно, перенаправив вывод wgetна tar, и дает tarцель, но на практике я не знаю , как положить кусочки вместе.

Ответы:


95

Вы можете сделать это, указав wgetвыводить свою полезную нагрузку на стандартный вывод (с флагом -O-) и подавить собственный вывод (с флагом -q):

wget -qO- your_link_here | tar xvz -

Чтобы указать целевой каталог:

wget -qO- your_link_here | tar xvz - -C /target/directory

Обновить

Если у вас есть GNU tar

wget -qO- your_link_here | tar --transform 's/^dbt2-0.37.50.3/dbt2/' -xvz

должен позволить вам сделать все это за один шаг.

-q тихий

-O - вывод на стандартный вывод


К указанному пути следует:wget -qO- your_link_here | tar xvz - -C /target/directory
Марсло

может просто сказать людям использовать tar вместо wget тогда?
Александр Миллс

wget -qO- <url> | tar -xvz -C <target folder>работал на гну смолы.
Алик Эльзин-килака

14

Другой вариант - использовать curlзапись в stdout по умолчанию:

curl -s some_url | tar xvz -C /tmp

2
Мне нравится ваш вариант больше, чем другим, ноcurl -s some_url | tar xvz - -C /tmp
ПЯТНИЦ

1
как предложил FiftiN -> например, для просмотра отфильтрованного списка файлов внутри хранилища можно использовать:$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
Алексей Глуховцев

11

Этот oneliner делает трюк:

tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)

краткое объяснение: правая часть в круглых скобках выполняется первой ( -qговорит wget сделать это тихо, -O -используется для записи вывода в stdout).

Затем мы создаем именованный канал, используя оператор подстановки процесса из Bash <(для создания именованного канала . Таким образом, мы создаем временный файловый дескриптор и затем направляем содержимое этого дескриптора в tar с помощью <оператора перенаправления файлов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.