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?

Mercer
quelle
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
Alfe
quelle
107
gzip -dc archive.tar.gz | tar -xf - -C /destination

oder mit GNU Teer

tar xzf archive.tar.gz -C /destination
Mercer
quelle
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 ',^/,,'
javaPlease42
quelle
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
Rahul Shivalkar
quelle