2010-06-01 4 views
23

Ich möchte ein Archiv entpacken, z. "tar123.tar.gz" in das Verzeichnis/myunzip/tar123/"mit einem Shell-Befehl.untar filename.tr.gz in das Verzeichnis "filename"

tar -xf tar123.tar.gz dekomprimiert die Dateien aber im selben Verzeichnis wie in dem ich arbeite.

Wenn der Dateiname "tar233.tar.gz" wäre, möchte ich, dass er in /myunzip/tar233.tar.gz dekomprimiert wird, damit das Zielverzeichnis auf dem Dateinamen basiert.

Weiß jemand, ob der Befehl tar dies tun kann?

Antwort

30

Mit Bash und GNU tar:

file=tar123.tar.gz 
dir=/myunzip/${file%.tar.gz} 
mkdir -p $dir 
tar -C $dir -xzf $file 
+0

das Problem hier ist, dass ich weiß nicht, was der Dateiname sein. Es wird eine versionierte Datei sein, also könnte es heute 1.tar.gz sein, aber morgen könnte es 2.tar.gz sein. Gibt es eine Möglichkeit, einfach "file = what-ever-in/home/user" zu sagen? – Jorre

+0

Du wirst es irgendwie wissen müssen. Wenn sie sortieren, können Sie etwas wie 'file = $ (ls -1 $ pattern | tail -1)' verwenden. –

4

Sie können das Verzeichnis vor dem Extrahieren mit dem Flag -C ändern, aber das Verzeichnis muss bereits existieren. (Wenn Sie dateispezifischen Verzeichnisse zu erstellen, empfehle ich gegen sie foo.tar.gz Aufruf -.. Die Erweiterung bedeutet, dass es eine Archivdatei, aber es ist eigentlich ein Verzeichnis, das wird führen zu Verwirrtheit)

2

Versuchen

file=tar123.tar.gz 
dir=/myunzip/$(basename $file .tar.gz) # matter of taste and custom here 
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; } 
mkdir "$dir" && (gzip -d "$file | (cd "$dir" && tar xf -)) 

Wenn Sie GNU tar verwenden, können Sie auch eine Option -C "$dir" angeben, die vor dem Extrahieren in das Verzeichnis wechselt. Aber der obige Code sollte auch mit einem Bronzezeit-Teer funktionieren.

Haftungsausschluss: keiner der obigen Codes wurde getestet.

23
tar -xzvf filename.tar.gz -C destination_directory 
+1

Ich brauchte nur den '-C' Teil, danke! – juanmirocks