GNU/Linux >> Belajar Linux >  >> Linux

ekstrak satu file dari file tgz besar

Sayangnya, untuk membongkar satu anggota .tar.gz arsip Anda harus memproses seluruh arsip, dan tidak banyak yang dapat Anda lakukan untuk memperbaikinya.

Di sinilah .zip (dan beberapa format lain seperti .rar ) arsip bekerja jauh lebih baik, karena zip format memiliki direktori pusat dari semua file yang terkandung di dalamnya dengan offset langsung yang menunjuk ke tengah zip file, sehingga anggota arsip dapat diekstraksi dengan cepat tanpa memproses semuanya.

Anda mungkin bertanya mengapa memproses .tar.gz sangat lambat?

.tar.gz (sering disingkat menjadi .tgz ) hanyalah .tar arsip dikompresi dengan gzip kompresor. gzip adalah kompresor streaming yang hanya dapat bekerja dengan satu file. Jika Anda ingin mendapatkan bagian dari gzip streaming, Anda harus membuka kompresinya secara keseluruhan, dan inilah yang benar-benar mematikannya untuk .tar.gz (dan untuk .tar.bz2 , .tar.xz dan format serupa lainnya berdasarkan .tar ).

.tar format sebenarnya sangat, sangat sederhana. Ini hanyalah aliran file 512-byte atau header direktori (nama, ukuran, dll), masing-masing diikuti oleh konten file atau direktori (diisi ke ukuran blok 512 dengan 0 byte jika perlu). Ketika Anda mengamati blok 512 yang benar-benar nol untuk sebuah header, ini berarti akhir dari .tar arsipkan.

Beberapa orang bahkan berpikir bahwa .tar anggota arsip tidak dapat diakses dengan cepat, tetapi ini cukup BENAR. Jika .tar arsip berisi beberapa file besar, Anda sebenarnya dapat dengan cepat mencari ke header berikutnya, dan dengan demikian Anda dapat menemukan anggota arsip yang diperlukan dalam beberapa pencarian (tetapi masih dapat memerlukan pencarian sebanyak anggota arsip). Jika .tar Anda arsip berisi banyak file kecil, ini berarti pengambilan anggota cepat menjadi tidak mungkin secara efektif bahkan untuk .tar yang tidak terkompresi .


Jika Anda mengekstrak hanya satu file dari file tar besar, Anda menggunakan GNU tar , dan Anda dapat menjamin bahwa file tar tidak pernah ditambahkan ke maka Anda bisa mendapatkan peningkatan kinerja yang signifikan dengan menggunakan --occurrence .

Opsi ini memberi tahu tar untuk berhenti segera setelah menemukan kejadian pertama dari setiap file yang Anda minta, jadi mis.

tar xf large-backup.tar --occurrence etc/passwd etc/shadow

tidak akan menggulung seluruh tarball setelah menemukan satu salinan dari masing-masing passwd dan shadow , malah akan berhenti. Jika file-file itu muncul menjelang akhir, peningkatan kinerja tidak akan banyak, tetapi jika muncul bahkan setengah dari file 500G, Anda akan menghemat banyak waktu.

Untuk orang yang menggunakan tar untuk pencadangan sekali pakai dan tidak menggunakan drive kaset asli, situasi ini mungkin merupakan kasus umum.

Perhatikan bahwa Anda juga dapat meneruskan --occurrence=NUMBER untuk mengambil kemunculan ke-NUMBER dari setiap file, yang membantu jika Anda tahu ada ada beberapa versi dalam arsip. Secara default perilakunya sama dengan NUMBER dari 1.


Saat berhadapan dengan penggunaan tarbal besar:

--fast-read untuk mengekstrak hanya entri arsip pertama yang cocok dengan operan nama file, path/to/file dalam hal ini - yang selalu unik dalam tarball

tar -xvf file.tgz --fast-read path/to/file

di atas akan mencari sampai menemukan kecocokan dan kemudian keluar


Linux
  1. Cara mengekstrak file dari arsip paket Debian DEB

  2. Tar:Ekstrak File Tunggal Ke Direktori Tanpa Membuat Subfolder?

  3. Kesalahan Keluaran Dari Arsip:Tar.xz:Format File Tidak Diakui?

  1. Membuka file .tar.gz dengan satu perintah

  2. Bagaimana cara mengekstrak satu potongan byte dari dalam file?

  3. Memperbarui satu file dalam tar terkompresi

  1. Bagaimana Mengubah File Tar Menjadi File Tgz?

  2. rsync ke/dari arsip tar

  3. Format arsip yang diindeks?