Auch -C, --directory DIR\n change to directory DIRsollte eher als beschrieben werden change output directory to DIR (will fail if DIR doesn't exist). Danke @Mich. Siehe auch @ Bryan_Larsens Antwort.
Gültig
1
@ Ujjwal Sing: In der Tat ist die Manpage tar nicht so hilfreich. Es beschreibt "-C DIR" als "in das Verzeichnis DIR wechseln". Noch schlimmer: "tar-C mein xf archive.tar" funktioniert nicht, während "tar-C mein xf archive.tar" funktioniert.
Pat Morin
@PatMorin Um fair zu sein: Wenn Sie die Argument-Aufruf-Konventionen verstanden haben, ist dies sinnvoll. Sie können auch tar xfC archive.tar mydiroder tun tar -C mydir -xf archive.tar. Es ist nur das Mischen von Flaggen im traditionellen Stil und im GNU-Stil, das die Dinge bricht, wie es ehrlich gesagt erwartet wird. Herkömmliche Flags werden als erstes Argument als ein Blob übergeben. Sie können nicht erwarten, dass sie funktionieren, wenn sie nicht die ersten sind. (Ich meine, ja, es ist sowieso möglich, es zu interpretieren - mein Punkt ist, dass es darüber hinaus geht, nicht Standard)
Nic Hartley
Antworten:
958
Verwenden Sie zum Extrahieren eines Archivs in ein anderes Verzeichnis als das aktuelle die Option, -Coder --directory, tar, wie in
tar -xf archive.tar -C /target/directory
Beachten Sie, dass das Zielverzeichnis vorhanden sein muss, bevor Sie diesen Befehl ausführen (er kann erstellt werden von mkdir /target/directory).
Weitere Optionen finden Sie auf der Handbuchseite (Befehl man tar:).
Kann der Pfad entfernt werden: dh einfach die Datei
abrufen
3
Wenn es sich um eine größere Datei handelt, erhalten Sie beim Ausführen des Befehls nur einige Sekunden oder sogar Minuten lang keine Ausgabe, während der Befehl ausgeführt wird. Sie können dies beheben, indem Sie das -vFlag ( ausführlicher Modus ) hinzufügen, das den Namen jeder Datei beim Extrahieren auflistet.
IQAndreas
Wenn Sie Probleme damit haben, beachten Sie auch den --strip-components=1Rat der anderen Antwort.
Ist es nicht erstaunlich, dass es nach all den Jahren, in denen sich alle Optionen tarangesammelt haben, immer noch keine Option gibt , das Ausgabeverzeichnis zu erstellen, wenn es nicht existiert ?
EM0
261
Beachten Sie: Wenn Ihr Archiv bereits einen Verzeichnisnamen enthält, den Sie ändern möchten, fügen Sie die folgende --strip-components=1Option hinzu:
tar xf archive.tar -C /target/directory --strip-components=1
Danke. Downloads über wget / etc haben immer ein übergeordnetes Verzeichnis. Dies ist die vollständige Antwort imo - oder sollte in Antwort oben vermerkt werden.
bshea
Genau das, wonach ich gesucht habe. --strip-componentsist sehr nützlich, wenn Sie Provisioner ausführen, die möglicherweise unterschiedliche Versionen verwenden. Dies /target/directorykann ein generischer Name sein, ohne sich Gedanken darüber machen zu müssen, wie der Anbieter seinen Archivordner benannt hat.
Jack_Hu
30
Die vorherigen Antworten und Kommentare kombinieren:
So extrahieren Sie einfach den Inhalt und erstellen ein Zielverzeichnis, falls es fehlt:
mkdir -p /target/directory && tar xf archive.tar -C /target/directory
So extrahieren und entfernen Sie das Stammverzeichnis (erste Ebene) in der ZIP-Datei
mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
Ich verwende GNU tar 1.26 und bekomme einen unbekannten Optionsfehler für--one-top-level
Emma Strubell
Das ist die Antwort, die ich brauchte. Sehr nützlich, um den Verzeichnisnamen nicht angeben zu müssen, oder um sich einen speziellen Code zu merken, der auf die Datei für den Namen verweist. Danke.
Heuchler
2
Was ich in Bezug auf die Extraktion interessant fand, ist, dass es davon abhängt, wie Sie das Archiv erstellt haben, siehe dieses Beispiel
cd /tmp
mkdir folder
touch folder/file.txt
Wenn Sie dies tun, ist tar -zcvf folder.tar.gz folderalles wie erwartet = Wenn Sie es jetzt entpacken, wird es entpackt (Ordner wird erstellt, wenn Sie es entfernt haben) als /tmp/folder/.
Wenn Sie jedoch tar as erstellen tar -zcvf tmp-folder.tar.gz /tmp/folderund es im Ordner / tmp entpacken, ist das Ergebnis /tmp/tmp/folderdirectory! In diesem Fall müssen Sie es enttarieren, um / -tar -xf tmp-folder.tar.gz -C /
-C, --directory DIR\n change to directory DIR
sollte eher als beschrieben werdenchange output directory to DIR (will fail if DIR doesn't exist)
. Danke @Mich. Siehe auch @ Bryan_Larsens Antwort.tar xfC archive.tar mydir
oder tuntar -C mydir -xf archive.tar
. Es ist nur das Mischen von Flaggen im traditionellen Stil und im GNU-Stil, das die Dinge bricht, wie es ehrlich gesagt erwartet wird. Herkömmliche Flags werden als erstes Argument als ein Blob übergeben. Sie können nicht erwarten, dass sie funktionieren, wenn sie nicht die ersten sind. (Ich meine, ja, es ist sowieso möglich, es zu interpretieren - mein Punkt ist, dass es darüber hinaus geht, nicht Standard)Antworten:
Verwenden Sie zum Extrahieren eines Archivs in ein anderes Verzeichnis als das aktuelle die Option,
-C
oder--directory
, tar, wie inBeachten Sie, dass das Zielverzeichnis vorhanden sein muss, bevor Sie diesen Befehl ausführen (er kann erstellt werden von
mkdir /target/directory
).Weitere Optionen finden Sie auf der Handbuchseite (Befehl
man tar
:).quelle
-v
Flag ( ausführlicher Modus ) hinzufügen, das den Namen jeder Datei beim Extrahieren auflistet.--strip-components=1
Rat der anderen Antwort.tar
angesammelt haben, immer noch keine Option gibt , das Ausgabeverzeichnis zu erstellen, wenn es nicht existiert ?Beachten Sie: Wenn Ihr Archiv bereits einen Verzeichnisnamen enthält, den Sie ändern möchten, fügen Sie die folgende
--strip-components=1
Option hinzu:quelle
--strip-components
ist sehr nützlich, wenn Sie Provisioner ausführen, die möglicherweise unterschiedliche Versionen verwenden. Dies/target/directory
kann ein generischer Name sein, ohne sich Gedanken darüber machen zu müssen, wie der Anbieter seinen Archivordner benannt hat.Die vorherigen Antworten und Kommentare kombinieren:
So extrahieren Sie einfach den Inhalt und erstellen ein Zielverzeichnis, falls es fehlt:
So extrahieren und entfernen Sie das Stammverzeichnis (erste Ebene) in der ZIP-Datei
quelle
Eine andere Option ist --one-top-level. Dadurch wird automatisch ein Verzeichnis erstellt, das auf dem Dateinamen des Originals basiert.
Wenn Sie möchten, können Sie auch Ihre eigene angeben, und tar erstellt sie automatisch.
quelle
--one-top-level
Was ich in Bezug auf die Extraktion interessant fand, ist, dass es davon abhängt, wie Sie das Archiv erstellt haben, siehe dieses Beispiel
Wenn Sie dies tun, ist
tar -zcvf folder.tar.gz folder
alles wie erwartet = Wenn Sie es jetzt entpacken, wird es entpackt (Ordner wird erstellt, wenn Sie es entfernt haben) als/tmp/folder/
.Wenn Sie jedoch tar as erstellen
tar -zcvf tmp-folder.tar.gz /tmp/folder
und es im Ordner / tmp entpacken, ist das Ergebnis/tmp/tmp/folder
directory! In diesem Fall müssen Sie es enttarieren, um / -tar -xf tmp-folder.tar.gz -C /
quelle
Mit tar 1.29 können wir einfach den Verzeichnisnamen nach dem tar-Dateinamen hinzufügen. Zum Beispiel,
quelle