So dekomprimieren Sie ein tar.gz in einem anderen Verzeichnis


270

Ich habe ein Archiv

* .tar.gz

Wie kann ich dies in einem Zielverzeichnis dekomprimieren?


9
Warum all die Abstimmungen? Es gibt mehr Optionen als nur -C (und möglicherweise bietet seine Version dies nicht).
Alfe

2
Stack Overflow ist eine Site für Programmier- und Entwicklungsfragen. Diese Frage scheint nicht zum Thema zu gehören, da es nicht um Programmierung oder Entwicklung geht. Weitere Informationen zu den Themen finden Sie hier in der Hilfe. Vielleicht ist Super User oder Unix & Linux Stack Exchange ein besserer Ort, um zu fragen.
JWW

@jww Während ich Ihren Standpunkt sehe, haben wir auch Tags mit Namen tarund gzin diesem Forum. Das Extrahieren eines Tarballs in ein bestimmtes Verzeichnis kann durchaus Teil eines Shell-Skripts und damit Teil der Programmierung sein. Ich denke, diese Art von Frage kann dann in beiden Foren gestellt werden.
Alfe

Antworten:


319

Sie können die Option verwenden -C(oder --directorywenn Sie lange Optionen bevorzugen), um das Zielverzeichnis Ihrer Wahl anzugeben, falls Sie die Gnu-Version von verwenden tar. Das Verzeichnis sollte existieren:

mkdir foo
tar -xzf bar.tar.gz -C foo

Wenn Sie nicht tarin der Lage sind, in ein bestimmtes Verzeichnis zu extrahieren, können cdSie vor dem Aufruf einfach in Ihr Zielverzeichnis wechseln tar. dann müssen Sie natürlich einen vollständigen Pfad zu Ihrem Archiv angeben. Sie können dies in einer Scoping-Subshell tun, um eine Beeinflussung des umgebenden Skripts zu vermeiden:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

Wenn weder ein absoluter Pfad noch ein relativer Pfad zur Archivdatei geeignet ist, können Sie das Archiv auch außerhalb der Scoping-Subshell benennen:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

107
gzip -dc archive.tar.gz | tar -xf - -C /destination

oder mit GNU Teer

tar xzf archive.tar.gz -C /destination

3
Ich mag die Idee zu verwenden, gzipfalls der Teer komprimierte Archive nicht versteht.
Alfe

4

Extrakte myArchive.tar zu / destinationDirectory

Befehle:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'

0

Mit der for- Schleife können Sie mehrere .tar.gz-Dateien in einem anderen Ordner entpacken. Der folgende Code verwendet / destination / folder / path als Argument für das Skript und entpackt alle .tar.gz-Dateien, die am aktuellen Speicherort in / destination / folder / path vorhanden sind.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.