Wie extrahiere ich mit tar in ein anderes Verzeichnis?

18

Das geht nicht:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Mir ist nicht klar, was dies tun würde, außer es zu extrahieren und die Dateien zu verschieben.

Kit Sunde
quelle

Antworten:

28

Von man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

dh tar xC /foo/bar -f /tmp/foo.tar.gzsollte den Job machen. (unter FreeBSD, aber in dieser Hinsicht ist GNU tar im Grunde dasselbe, siehe "Ändern des Arbeitsverzeichnisses" in seinem Handbuch )

sr_
quelle
4
Ich empfehle, dieses Verhalten mit Nicht-GNU-Versionen von tar zu testen . In der Solaris-Handbuchseite wird diese Option nur in Kombination mit Hinzufügungs- und Ersetzungsvorgängen erwähnt . Da ich neugierig bin, habe ich es mit einer Extraktionsoperation getestet . Solaris' tar hat nicht erteilt einen Fehler oder eine Warnung und das Archiv im aktuellen Ordner extrahierte =: - /
ktf
1
Funktioniert auch nicht auf der AIX-Version von tar: 'Datei -C nicht im Archiv vorhanden' - das '-C' funktioniert zum Erstellen von Tarballs.
DarkHeart
Ist es möglich, das Hauptverzeichnis mit einem neuen Namen auszutauschen?
Tofutim
9

wenn Sie an anderer Stelle nur ein tar - Archiv extrahieren cd in das Zielverzeichnis und entpacken Sie es dort:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

Der Befehl, den Sie verwendet haben, durchsucht die Datei foo/barim Archiv und extrahiert sie.

ktf
quelle
9

Tun:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

würde den Job machen.

Grundsätzlich wird eine neue Shell (die Klammern) erzeugt. Wechseln Sie in dieser Subshell in das Verzeichnis foo/barund entpacken Sie die Datei.

Sie können das ändern , ;indem ein &&sicher , dass das sein cdfunktioniert gut.

jfg956
quelle
1
Wow, dass du so eine Shell starten kannst, ist ziemlich cool! Ich hatte keine Ahnung, dass Sie das tun könnten.
Kit Sunde
0
tar -xf ancd.tar.gz my/name/file

Sie können den Dateinamen mit ./fileafter tar file angeben.

tar -xf ancd.tar.gz ./my/name/file

Wenn es funktioniert, bedeutet dies, dass Sie einen Teer mit erstellt haben ./. Verwenden Sie den Befehl less, um den Inhalt von tar zu sehen.

less ...tar.file  
user2761565
quelle
0

Ich bin auf ein ähnliches Problem gestoßen und habe es gelöst.

Das Problem lag eher in der Dateierstellung als in der erstellten Datei.

Beim Versuch, eine Datei in Verzeichnis A zu tarieren und zu übertragen, habe ich den Pfad zur Originaldatei im Befehl tar angegeben

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

Was ich tun konnte, um zu lösen, ist

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Beim Übertragen und Extrahieren des Tarballs werden die erforderlichen Unterverzeichnisse erstellt.

tar -xvf MyFile.tar
OtisM
quelle
0

Ändern Sie das Verzeichnis, in das Sie extrahieren möchten

cd /u02/restore

Wenn Speicherort der Extraktdatei unter /u01/backup.tar dann

Extrahieren Sie wie folgt:

cd /u02/restore
tar -xvf /u01/backup.tar
Teja
quelle
0

Der Befehl:

tar -xzvf foo.tar.gz -C /home/user/bar/

extrahiert die Eingabedatei "foo.tar.gz" in das Verzeichnis /home/user/bar, während die verarbeiteten Dateien gedruckt werden.

tzabal
quelle