unzip
hat eine raffinierte Option -j
, bei der die Verzeichnisstruktur des Archivs verworfen wird und alle Dateien in dasselbe Verzeichnis extrahiert werden.
Gibt es eine Möglichkeit, tar
auf die gleiche Weise zu arbeiten? Nichts in der Manpage scheint darauf hinzudeuten.
Gibt es also ein alternatives Tool, vorzugsweise Freie Software, das dies ermöglicht?
Antworten:
GNU Teer lebt von Featuritis, daher hat er natürlich auch einige Optionen dafür.
http://www.gnu.org/software/tar/manual/html_node/transform.html
Wenn Sie nur ein paar Pfadsegmente entfernen möchten, ist
--strip-components=n
oder--strip=n
ist dies häufig der Fall :Es ist aber auch möglich, die zu extrahierenden Dateien neu zu schreiben (Flags sind
--transform
oder--xform
und akzeptieren dies mit dem/x
Modifikator):Für die Auflistung eines Tar benötigen Sie die zusätzliche
--show-transformed
Option:Ich glaube, die Optionen zum Umschreiben funktionieren auch beim Packen, nicht nur beim Extrahieren. Hat
pax
aber offensichtlich eine schönere Syntax.quelle
s#.*/##
?--strip
Wird in der Manpage zu os x tar nicht erwähnt, funktioniert aber trotzdem, danke!--strip
und--strip-components
?Das geht ganz einfach in zwei Schritten. Bei Bedarf anpassen:
quelle
find -exec mv -i
anstattfind | xargs
) ... einfache schritte, die ich auf jedem system wiederholen kann, ohne ein script mitnehmen zu müssen, um es für mich zu machen.tmpdir=$( mktemp -d )
ist praktisch beim Erstellen von temporären Verzeichnissenpax
kann es tun:oder
Sie können den Vorgang zum Ersetzen von Namen zuerst überprüfen, indem Sie die
-r
Option weglassen .quelle
Eine mögliche Lösung, die keine Installation erfordert.
tar tvf
, um alle Dateien aus dem Tarball zu holenExtrahieren Sie diese Dateien einzeln - lassen Sie tar nach stdout extrahieren und auf $ filename umleiten
als extract.sh speichern und ausführen als
extract.sh myfile.tar
. Es werden auch alle doppelten Dateinamen überschrieben, die in den vom Tarball abgerufenen Verzeichnissen gefunden wurden.quelle
Die
-O
Option extrahiert eine Datei, um sie zu standardisieren, und>
leitet diese Ausgabe in eine Datei um. In meinem Beispiel extrahiere ich foo.mp3 und leite es in bar.mp3 um. Die Dateinamen sind beliebig.quelle