Cara membuka kompresi tar.gz di direktori lain

270

Saya punya arsip

* .tar.gz

Bagaimana saya bisa mengompres ini di direktori tujuan?

Mercer
sumber
9
Kenapa semua downvotes? Ada lebih banyak pilihan daripada hanya -C (dan mungkin versinya tidak menyediakan ini).
Alfe
2
Stack Overflow adalah situs untuk pertanyaan pemrograman dan pengembangan. Pertanyaan ini tampaknya di luar topik karena ini bukan tentang pemrograman atau pengembangan. Lihat Topik apa yang bisa saya tanyakan di sini di Pusat Bantuan. Mungkin Super User atau Unix & Linux Stack Exchange akan menjadi tempat yang lebih baik untuk bertanya.
jww
@jww Sementara saya melihat poin Anda, kami juga memiliki tag bernama tardan gzsekitar di forum ini . Mengekstrak tarball ke direktori tertentu bisa menjadi bagian dari skrip shell dan dengan demikian bagian dari pemrograman. Saya kira pertanyaan semacam ini bisa ditanyakan di kedua forum itu.
Alfe

Jawaban:

319

Anda dapat menggunakan opsi -C(atau --directoryjika Anda lebih suka opsi panjang) untuk memberikan direktori target pilihan Anda jika Anda menggunakan versi Gnu tar. Direktori harus ada:

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

Jika Anda tidak menggunakan tarkemampuan mengekstraksi ke direktori tertentu, Anda bisa cdmasuk ke direktori target Anda sebelum menelepon tar; maka Anda harus memberikan jalur lengkap ke arsip Anda, tentu saja. Anda dapat melakukan ini dalam subkelas pelingkupan untuk menghindari memengaruhi skrip di sekitarnya:

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

Atau, jika jalur absolut atau jalur relatif ke file arsip tidak cocok, Anda juga dapat menggunakan ini untuk memberi nama arsip di luar subkelas pelingkupan:

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

atau, dengan tar GNU

tar xzf archive.tar.gz -C /destination
Mercer
sumber
3
Saya suka gagasan menggunakan gzipseandainya tar tidak mengerti arsip zip.
Alfe
4

Ekstrak myArchive.tar ke / destinationDirectory

Perintah:

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

Anda dapat menggunakan untuk loop untuk membatalkan beberapa file .tar.gz ke folder lain. Kode berikut akan mengambil / destination / folder / path sebagai argumen ke skrip dan menghapus semua file .tar.gz yang ada di lokasi saat ini di / 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
sumber