Chciałbym pobrać i rozpakować archiwum w danym katalogu. Oto jak to robiłem do tej pory:
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
Chciałbym zamiast tego pobierać i rozpakowywać archiwum w locie , bez konieczności tar.gz
zapisywania na dysku. Myślę, że jest to możliwe, przesyłając dane wyjściowe wget
do tar
i podając tar
cel, ale w praktyce nie wiem, jak połączyć te elementy.
wget -qO- your_link_here | tar xvz - -C /target/directory
wget -qO- <url> | tar -xvz -C <target folder>
pracował na tar smaku.Inną opcją jest użycie
curl
domyślnego zapisu na standardowe wyjście:źródło
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
Ten oneliner rozwiązuje problem:
krótkie wyjaśnienie: prawa strona w nawiasie jest wykonywana jako pierwsza (
-q
mówi wget, aby zrobiła to po cichu,-O -
służy do zapisania wyjścia na standardowe wyjście).Następnie tworzymy nazwany potok za pomocą operatora podstawienia procesu z Bash,
<(
aby utworzyć nazwany potok . W ten sposób tworzymy tymczasowy deskryptor pliku, a następnie kierujemy jego zawartość do tar za pomocą<
operatora przekierowania pliku.źródło