Як завантажити архів і витягнути його, не зберігаючи архів на диску?


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вивести свій корисний набір stdout (з прапором -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 - вихід на stdout


До вказаного шляху слід:wget -qO- your_link_here | tar xvz - -C /target/directory
Marslo

можливо, просто скажіть людям тоді використовувати дьоготь замість wget?
Олександр Міллз

wget -qO- <url> | tar -xvz -C <target folder>працював на гну-тарі.
AlikElzin-kilaka

14

Іншим варіантом є використання, curlяке пише для stdout за замовчуванням:

curl -s some_url | tar xvz -C /tmp

2
Мені подобається ваш варіант більше, ніж іншим, алеcurl -s some_url | tar xvz - -C /tmp
FiftiN

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.