Ich habe eine Zip-Datei wie myArchive123.tar.gz
. Darin befindet sich ein Ordner wiehelloWorld
Wenn ich es extrahiere: tar -xf myArchive123.tar.gz
bekomme ich den helloWorld
Ordner:
ls
myArchive123.tar.gz
helloWorld
Ich möchte, dass die Ausgabe den gleichen Namen wie der Dateiname ohne die Erweiterung .tar.gz hat. Dh:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Kann das gemacht werden?
- Ich weiß nie, was sich im Archiv befindet. Könnte ein Ordner sein, könnte viele Dateien sein.
- Ich würde gerne ein anderes Tool verwenden, wenn tar das nicht kann.
- Ich würde ein längeres Formular akzeptieren, das in ein Skript umgewandelt werden kann
EDIT
In der Zwischenzeit habe ich mir ein Skript gehackt, das den Job zu erledigen scheint. (Siehe meine Antwort unten). Wenn es verbessert werden kann, können Sie gerne Kommentare / zusätzliche Antworten posten. Die Hauptsache ist, dass es in einem Einzeiler verpackbar sein sollte, wie:
extract <file>
Antworten:
Mit
gnu tar
könnten Sie verwenden--xform
(oder--transform
) zu prepend/prefix/
jeden Dateinamen:Anmerkung dort hinführt nicht
/
inprefix/
und diesed
Expression Ende mitS
symbolischen Link - Zielen von Dateinamen Transformationen auszuschließen.Um es zu testen (Trockenlauf):
Um Ihnen den Einstieg zu erleichtern, finden Sie hier ein sehr vereinfachtes Skript, das Sie folgendermaßen aufrufen können
extract <file>
:quelle
Nun, Sie könnten es zumindest in ein paar Schritten tun. Wenn du. .. getan hast
das würde die Aufgabe erfüllen, obwohl es eine noch kompaktere Antwort geben könnte.
quelle
Bearbeiten
Die akzeptierte Antwort ist kürzer als die folgende. (Mach dasselbe, aber kürzer ist normalerweise besser).
Ich habe mir schließlich ein Skript für die anstehende Aufgabe gehackt. es funktioniert mit .tar .tar.gz und .gz
Verwendung:
Beachten Sie, dass diese Lösung Punkte in einem Dateinamen enthalten kann. ZB Eclipse-4.5M-SDK.tar.gz.
Ich behalte das Drehbuch in meinem Git-Repo. Die neueste Version finden Sie unter: https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here
quelle
Eine weitere mögliche Lösung ist die Verwendung der
--transform
Option:Mit Ihren Dateien:
quelle
--strip-components=0
entfernt einfach den ersten Verzeichnisnamen aus dem Pfad und-C
speichert mit der Option de-archivierte Dateien in das neue Verzeichnis.