Ich habe mich gefragt, ob (und natürlich wie) es möglich ist, tar
mehrere Dateien in einem Durchgang zu extrahieren.
Ich bin seit mehreren Jahren ein erfahrener Unix-Benutzer, und natürlich weiß ich, dass Sie mit for
oder find
oder dergleichen tar
für jedes Archiv, das Sie extrahieren möchten, einmal einen Aufruf durchführen können tar
um zwei .tar.gz-Dateien auf einmal zu extrahieren. (Und nein, daran ist nichts auszusetzen for
, ich frage nur, ob es möglich ist, darauf zu verzichten.)
Ich stelle diese Frage vielleicht eher aus Neugier
- Es gibt eine merkwürdige Abzweigung von
tar
irgendwo, die dies unterstützt - Jemand weiß, wie man den
-M
Parameter verwendet,tar
der mir beim Versuch vorgeschlagen wurdetar -zxv -f a.tgz -f b.tgz
- wir sind alle blind und es ist total einfach zu machen - aber ich konnte keinen Hinweis im Web finden, der nicht verwendet
for
oderfind
oderxargs
oder dergleichen.
Bitte antworten Sie nicht mit tar -zxvf *.tar.gz
(weil das nicht funktioniert) und antworten Sie nur mit „Funktioniert nicht“, wenn Sie sich absolut sicher sind (und vielleicht auch eine gute Erklärung dafür haben).
Bearbeiten: Ich wurde auf eine Antwort auf diese Frage zu Stack Overflow hingewiesen, die im Detail besagt, dass es nicht möglich ist, ohne die aktuelle tar
Syntax zu brechen , aber ich denke nicht, dass das wahr ist. Mit tar -zxv -f a.tgz -f b.tgz
oder tar -zxv --all-args-are-archives *.tar.gz
würde keine bestehende Syntax brechen, imho.
-M
Parameter.Antworten:
Dies ist möglich, die Syntax ist ziemlich einfach:
Die Option -i ignoriert die EOF am Ende der tar-Archive auf der Manpage:
quelle
cat *.tar.bz2 | tar -ixjv
. Vielen Dank!für * .tar.gz
für * .tar.bz2
für * .tar.xz
quelle
$file
wenn Ihre Dateien Namen mit Leerzeichen haben.Sie müssen eine Schleife verwenden. Es würde die
tar
Befehlszeilensyntax nicht brechen , um mehrere-f
Optionen zuzulassen , aber es würde das Hinzufügen von Code erfordern, um mehrere Archive nacheinander mit allen möglichen Randbedingungen zu verarbeiten (Was passiert, wenn ein Archiv in der Mitte fehlerhaft formatiert ist? Können die Archive andere verwenden?) Komprimierungsmechanismen? Können Sie auch mehrere-C
Optionen haben (GNU tar-Option, um in ein bestimmtes Verzeichnis zu extrahieren)? Was ist mit -K (GNU tar-Option, um bei einem bestimmten Mitgliedsnamen zu beginnen)?…).Eine Möglichkeit, eine
for
Schleife zu vermeiden , besteht darin, AVFS zu installieren und zu aktivieren , ein FUSE- Dateisystem, das transparenten Zugriff auf Archive bietet. Jedes Archiv dient gleichzeitig/path/to/archive
als Verzeichnis~/.avfs/path/to/archive#
. Wenn Sie die Archive mit Platzhaltern abgleichen möchten, müssen Sie diese#
einem Platzhalter-Match hinzufügen . es kann in zsh gemacht werden.quelle
find . -name "*.tar.gz" -exec tar xzf {} \;
quelle