tar: Скачать, разпаковывая

Админам или околоадминам давно приелись комманды

$ wget http://site.com/files/file.tar.gz
$ tar vxf file.tar.gz

Всё здорово, привычно, но...

  • Как часто нужен скачанный архив? Конечно зависит от специфики работы. Мне например не часто, т.е. добавляем удаление:

    $ rm file.tar.gz
  • А как быть в случае, когда по отдельности архив и распакованный архив умещаются на диске, но одновременно нет? Ну тупо места не хватает. Бывает, да :)

И есть решение! :)

Можно одной строчкой скачивать находу распаковывая в текущую папку. Линукс просто прелесть в этом плане:

$ curl http://site.com/files/file.tar.gz -0 | tar vxf -

всего то.

Что там произошло?

curl тупо отдаёт скачанный контент в stdout (надо обратить внимание, что в stderr отдаёт прогресс скачивания, пусть не смущает), после чего через пайп этот контент передаётся tar-у, который разжимает то, что пришло в stdin (в конце комманды стоит знак "-", что указывает что следует открыть файл stdin)

Чтобы смотреть на прогресс скачивания, а не распаковки (хотя это происходит синхронно), нужно убрать флаг многословности из тара. В таком случае сточки не будут бежать по экрану, будет аккуратненький прогрессбар, навроде:

$ curl http://site.com/files/file.tar.gz -0 | tar xf -
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
1 103M 1 1734k 0 0 477k 0 0:03:42 0:00:03 0:03:39 480k