Angenommen, ich habe eine Datei mit dem Namen ugly_name.tar
, die beim Extrahieren zum ugly_name
Verzeichnis wird. Welchen Befehl kann ich verwenden, damit der resultierende Verzeichnisname pretty_name
stattdessen lautet ?
125
Das sollte funktionieren:
mkdir pretty_name && tar xf ugly_name.tar -C pretty_name --strip-components 1
-C
wechselt vor dem Entpacken (oder Packen) in das angegebene Verzeichnis. --strip-components
Entfernt die angegebene Anzahl von Verzeichnissen aus den im Archiv gespeicherten Dateinamen.
Beachten Sie, dass dies nicht wirklich portabel ist. GNU tar und zumindest einige der BSD-Tars haben die --strip-components
Option, scheinen aber auf anderen Unix-ähnlichen Plattformen nicht zu existieren.
Die blöde Art und Weise, das zu tun, würde jedoch so ziemlich überall funktionieren.
tar xf ugly_name.tar && mv ugly_name pretty_name
tar -xvf /tmp/backupfiles.tar -C /var/www/
mv ugly-* pretty_name
ugly_name
Verzeichnis gibt. Übrigens liegt Schönheit im Auge des Betrachters.Wenden Sie mit GNU tar ≥1.16
--transform
eine sed regexp-Transformation auf jeden Dateinamen an (die Transformation wird auf den vollständigen Pfad im Archiv angewendet):Wenn
ugly_name
es sich bei allen Dateinamen im Archiv um die oberste Ebene handelt, müssen Sie sich nicht um eine genaue Zuordnung kümmern:Wenn Sie den Namen des Toplevel-Verzeichnisses nicht kennen, können Sie diese Methode trotzdem verwenden, obwohl Sie dies möglicherweise vorziehen
--strip-components
.pax
Verwenden Sie mit dem POSIX-Archivierungsdienstprogramm die-s
Option, die einen sed-ähnlichen Ersetzungsausdruck als Argument verwendet.quelle
Benutze das :
quelle
&&
Listenoperators zwischen diesen beiden Befehlen, sodass der zweite nur ausgeführt wird, wenn der erste erfolgreich war.ugly_name
vorhanden ist.Einfachster Weg
quelle
--one-top-level=pretty_name
ohne gepostet hat--strip-components 1
. (2) Im Gegensatz dazu die akzeptierte Antwort (veröffentlicht von Mat) gehört--strip-components 1
ohne--one-top-level=pretty_name
. (3) Können Sie erklären, warum Ihre Antwort, wenn Sie diese Optionen kombinieren, besser ist als eine der älteren? Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie Ihre Antwort, um sie klarer und vollständiger zu gestalten.--strip-component 1
ist erforderlich, entweder mit der Methodemkdir
oder--strip-components 1
, sonst bekommt man ebenpretty_name/ugly_name/
.Von askUbuntu funktionierte diese Antwort für mich:
Aktualisieren
Wie in den Kommentaren erwähnt , funktioniert diese Methode nicht für Archive, die ordnungsgemäß erstellt wurden. Wie jedoch aus einer anderen Antwort hervorgeht , sollten Sie hinzufügen,
--strip-components 1
dass dies wirklich funktioniert. Ich habe diese neue Option getestet und sie funktioniert sowohl für Archive mit einem Namen der obersten Ebene als auch für Archive ohne.quelle
pretty_name
mit dem Namen erstellt wird , in der sich das ursprüngliche Verzeichnis der obersten Ebene befindet. Wenn Sie beispielsweisetar xzf ugly_name.tgz
ein Verzeichnis mit dem Namen erstellen würden, würdeugly_name/
der von Ihnen angegebene Befehl erstelltpretty_name/ugly_name/
.