Bagaimana Anda mengekstrak satu folder dari arsip tar.gz yang besar?

132

Saya menggunakan perintah ini pada arsip 5GB

tar -zxvf archive.tar.gz /folder/in/archive

apakah ini cara yang benar untuk melakukan ini? Tampaknya butuh selamanya tanpa output baris perintah ...

Garrett Hall
sumber
Apakah Anda menggunakan jalur absolut atau relatif? Seharusnya relatif, selain itu terlihat benar. Berapa lama Anda membiarkannya berjalan, dan seberapa bagus sistem Anda? Setidaknya butuh beberapa menit menggunakan mesin yang cepat. Berpotensi satu jam atau lebih? Saya sedang menjalankan tes sekarang.
Kevin
Ya, itu selesai setelah ~ 1 jam, tapi jalur absolutnya salah, Anda benar.
Garrett Hall
5
Di Linux, Anda dapat menyaksikan sejauh mana arsip tersebut tarberada cat /proc/$(pidof tar)/fdinfo/0(adaptasikan perintah jika Anda memiliki lebih dari satu tarproses yang berjalan).
Gilles
Bagian penting juga tidak ada garis miring. Menggunakan folder/folder2/tidak akan berhasil.
Marki555

Jawaban:

145

tarmenyimpan jalur relatif secara default . GNU tar bahkan mengatakan demikian jika Anda mencoba untuk menyimpan jalur absolut:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

Jika Anda perlu mengekstrak folder tertentu, lihat apa yang ada di file tar:

tar -tvf foo.tar

Dan perhatikan nama file yang tepat. Dalam hal foo.tarfile saya , saya dapat mengekstraksi /home/foo/bardengan mengatakan:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Jadi tidak, cara Anda memposting bukanlah (harus) cara yang benar untuk melakukannya. Anda harus meninggalkan garis miring utama. Jika Anda ingin mensimulasikan jalur absolut, lakukan cd /terlebih dahulu dan pastikan Anda superuser. Juga, ini melakukan hal yang sama:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

Ada alasan yang sangat jelas dan bagus mengapa tarmengubah jalur ke jalur relatif. Salah satunya adalah kemampuan untuk mengembalikan arsip di tempat selain sumber aslinya. Yang lainnya adalah keamanan. Anda dapat mengekstrak arsip, mengharapkan file-nya muncul di direktori kerja Anda saat ini, dan alih-alih menimpa file sistem (atau pekerjaan Anda sendiri) di tempat lain karena kesalahan.

Catatan: jika Anda menggunakan -Popsi, tar akan mengarsipkan jalur absolut. Jadi selalu membayar untuk memeriksa isi arsip besar sebelum diekstraksi.

Alexios
sumber
36
--strip-components=Nsemoga bermanfaat bagi sebagian orang di sini.
Acumenus
2
dalam kasus saya itu perlu untuk menulis, ./foldername/bukan foldername, saya kira itu karena ketika saya membuat tar saya buat dengan itu tar -cvf santi.tar ./*dan ketika saya "mendaftar" tar inilah yang dikatakannyadrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti
1
Dan tentang .gz?
Peter Krauss
1
@PeterKrauss berubah -xvfmenjadi -xzvf(menambahkan -zopsi) dan jelas foo.tarke foo.tar.gzatau apa pun nama arsip Anda. Hal yang sama berlaku untuk -j(bz2) dan pada beberapa versi terbaru, -J(xz). Jika tidak, saluran pipa seperti zcat foo.tar.gz | tar -xvf - …juga berfungsi.
Alexios
Dan ingat, jika Anda bosan dengan semua output verbose selama ekstraksi lewati saja vsemua contoh. Misalnya, tar -tf foo.tardan tar -xf foo.tar ....
Bo R