Frage Wie extrahiere ich Dateien mit dem Befehl 'tar' in ein anderes Verzeichnis?


ich dachte tar archive.tar /users/mylocation würde funktionieren, aber es nicht. Wie kann ich das machen?


581
2018-05-26 16:01


Ursprung


Ebenfalls, -C, --directory DIR\n change to directory DIR sollte eher als beschrieben werden change output directory to DIR (will fail if DIR doesn't exist). Danke @Mich. Siehe auch @ Bryan_Larsen's Antwort. - valid
@Ujjwal Sing: In der Tat ist die Tear-Man-Seite nicht so hilfreich. Es beschreibt "-C DIR" als "Wechsel zum Verzeichnis DIR". Noch schlimmer: "tar -c mydir xf archive.tar" funktioniert nicht, während "tar xf archive.tar -C mydir" funktioniert. - Pat Morin


Antworten:


Um ein Archiv in ein anderes als das aktuelle Verzeichnis zu extrahieren, verwenden Sie das -C, oder --directory, tar Option, wie in

tar -xf archive.tar -C /target/directory

Beachten Sie, dass das Zielverzeichnis vor dem Ausführen dieses Befehls vorhanden sein muss (es kann von erstellt werden mkdir /target/directory).

Lies das Handbuchseite (Befehl: man tar) für andere Optionen.


841
2018-05-26 16:16



Sie müssen das Verzeichnis jedoch manuell erstellen. - Jürgen Paul
Kann der Pfad entfernt werden: d. H., Rufen Sie einfach die Datei ab - zzapper
Wenn es eine größere Datei ist, wenn Sie den Befehl ausführen, ist alles, was Sie erhalten, keine Ausgabe für einige Sekunden oder sogar Minuten, während es funktioniert. Sie können das beheben, indem Sie das hinzufügen -v Flagge (ausführlicher Modus), die den Namen jeder Datei auflistet, wenn sie extrahiert wird. - IQAndreas
@consult xkcd.com/1168 - Duncan X Simpson
Ist es nicht erstaunlich, nach all den Jahren mit all den Möglichkeiten? tar angesammelt hat, gibt es noch keine Option zu Erstellen Sie das Ausgabeverzeichnis, falls es nicht existiert? - EM0


Wenn Ihr Tarball bereits einen Verzeichnisnamen enthält, den Sie ändern möchten, fügen Sie das hinzu --strip-components=1 Möglichkeit:

tar xf archive.tar -C /target/directory --strip-components=1

215
2018-05-21 18:32



Vielen Dank. Downloads über wget / etc haben immer ein 'parent' -Verzeichnis. Dies ist die komplette Antwort imo - oder sollte in der Antwort oben erwähnt werden. - bshea


Kombinieren der vorherigen Antworten und Kommentare:

Einfach den Inhalt extrahieren und Zielverzeichnis erstellen, wenn es fehlt:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Zum Extrahieren und Entfernen des Stammverzeichnisses (erste Ebene) in der Zip-Datei

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

20
2018-06-27 19:29





Eine andere Option ist die Verwendung von - one-top-level. Dies erstellt automatisch ein Verzeichnis basierend auf dem Dateinamen des Originals.

tar zxvf filename.tgz --one-top-level

Wenn Sie möchten, können Sie auch Ihre eigenen angeben und tar erstellt sie automatisch.

tar zxvf filename.tgz --one-top-level=new_directory

6
2018-03-22 21:49





Mit tar 1.29 können wir einfach den Verzeichnisnamen nach dem tar-Dateinamen hinzufügen. Zum Beispiel,

tar zxvf tar-file directory-name/

1
2018-06-29 23:00





Was ich im Zusammenhang mit der 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 das tun tar -zcvf folder.tar.gz folder alles ist wie erwartet = wenn Sie es jetzt entpacken, wird es entpackt (Ordner wird erstellt, wenn Sie es entfernt haben) als /tmp/folder/.

Aber wenn Sie tar als erstellen tar -zcvf tmp-folder.tar.gz /tmp/folder und du entpackst es im / tmp-Ordner, das Ergebnis wird sein /tmp/tmp/folder Verzeichnis ! In diesem Fall müssen Sie es entpacken / tar -xf tmp-folder.tar.gz -C /


0
2017-09-01 22:25