Я хотел бы скачать и распаковать архив по заданному каталогу. Вот как я это делал до сих пор:
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
цель, но на практике я не знаю , как положить кусочки вместе.
wget -qO- your_link_here | tar xvz - -C /target/directory
wget -qO- <url> | tar -xvz -C <target folder>
работал на гну смолы.Другой вариант - использовать
curl
запись в stdout по умолчанию:источник
curl -s some_url | tar xvz - -C /tmp
$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
Этот oneliner делает трюк:
краткое объяснение: правая часть в круглых скобках выполняется первой (
-q
говорит wget сделать это тихо,-O -
используется для записи вывода в stdout).Затем мы создаем именованный канал, используя оператор подстановки процесса из Bash
<(
для создания именованного канала . Таким образом, мы создаем временный файловый дескриптор и затем направляем содержимое этого дескриптора в tar с помощью<
оператора перенаправления файлов.источник