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