Ich möchte ein Archiv unter einem bestimmten Verzeichnis herunterladen und extrahieren. So habe ich es bisher gemacht:
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
Ich möchte stattdessen das Archiv im laufenden Betrieb herunterladen und extrahieren , ohne es tar.gz
auf die Festplatte geschrieben zu haben. Ich denke, dass dies möglich ist, indem man die Ausgabe von wget
an tar
weiterleitet und tar
ein Ziel angibt, aber in der Praxis weiß ich nicht, wie ich die Teile zusammensetzen soll.
wget -qO- your_link_here | tar xvz - -C /target/directory
wget -qO- <url> | tar -xvz -C <target folder>
arbeitete an Gnu Teer.Eine andere Option ist,
curl
die standardmäßig in stdout schreibt:quelle
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
Dieser Oneliner macht den Trick:
kurze erklärung: die rechte seite in der klammer wird zuerst ausgeführt (
-q
sagt wget, dass es leise zu tun ist,-O -
wird verwendet, um die ausgabe nach stdout zu schreiben).Anschließend erstellen wir eine Named Pipe mit dem Prozessersetzungsoperator von Bash
<(
, um eine Named Pipe zu erstellen . Auf diese Weise erstellen wir einen temporären Dateideskriptor und leiten den Inhalt dieses Deskriptors mithilfe des<
Dateiumleitungsoperators an tar weiter .quelle