Jak rozpakować plik tar.gz w innym katalogu

270

Mam archiwum

* .tar.gz

Jak mogę to rozpakować w katalogu docelowym?

Bławatnik
źródło
9
Dlaczego wszystkie opinie? Jest więcej opcji niż tylko -C (i być może jego wersja tego nie zapewnia).
Alfe,
2
Stack Overflow to strona z pytaniami dotyczącymi programowania i programowania. To pytanie wydaje się nie na temat, ponieważ nie dotyczy programowania ani programowania. Zobacz o jakie tematy mogę pytać tutaj w Centrum pomocy. Być może lepiej byłoby zapytać Super User lub Unix & Linux Stack Exchange .
jww
@jww Podczas gdy widzę twój punkt, mamy również tagi nazwane tari gzwokół tego forum. Rozpakowywanie tarballa do określonego katalogu może być częścią skryptu powłoki, a zatem częścią programowania. Wydaje mi się, że tego rodzaju pytanie można zadać na obu forach.
Alfe

Odpowiedzi:

319

Możesz użyć tej opcji -C(lub --directoryjeśli wolisz długie opcje), aby podać docelowy katalog na wypadek, gdybyś używał wersji GNU tar. Katalog powinien istnieć:

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

Jeśli nie używasz tarfunkcji rozpakowywania do określonego katalogu, możesz po prostu cdprzejść do katalogu docelowego przed wywołaniem tar; wtedy oczywiście musisz podać pełną ścieżkę do swojego archiwum. Możesz to zrobić w skorupie zakresu, aby uniknąć wpływu na otaczający skrypt:

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

Lub, jeśli ani ścieżka bezwzględna, ani ścieżka względna do pliku archiwum nie jest odpowiednia, możesz także użyć tego do nazwania archiwum poza podpowłokę zakresu:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz
Alfe
źródło
107
gzip -dc archive.tar.gz | tar -xf - -C /destination

lub z GNU tar

tar xzf archive.tar.gz -C /destination
Bławatnik
źródło
3
Podoba mi się pojęcie używania gzipw przypadku, gdy tar nie zrozumie spakowanych archiwów.
Alfe
4

Wyodrębnia plik myArchive.tar do katalogu / destinationDirectory

Polecenia:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
javaPlease42
źródło
0

Można użyć dla pętli rozpakować wielu plików .tar.gz do innego folderu. Poniższy kod pobierze / destination / folder / path jako argument do skryptu i rozpakuje wszystkie pliki .tar.gz obecne w bieżącej lokalizacji w / destination / folder / path.

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
źródło