Saya memiliki file tar besar (sekitar 500G) dan saya tidak ingin mengekstrak hanya satu file darinya.
Namun, ketika saya menjalankannya tar -xvf file.tgz path/to/file
sepertinya masih memuat seluruh konten ke dalam memori, dan membutuhkan waktu lebih dari satu jam untuk mengekstrak. Saya juga telah mencoba menggunakan di --exclude=ignore.txt
mana ign.txt adalah daftar pola dalam upaya untuk menghentikannya dari melintasi jalur yang sia-sia, tetapi itu sepertinya tidak berhasil.
Mungkin saya tidak mengerti tar ... Apakah ada cara untuk dengan cepat mengekstrak file?
Jawaban:
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 lebih baik, karenazip
format memiliki direktori pusat semua file yang terkandung di dalamnya dengan offset langsung yang menunjuk ke tengahzip
file, sehingga anggota arsip dapat dengan cepat diekstraksi tanpa memproses semuanya.Anda mungkin bertanya mengapa pemrosesan
.tar.gz
sangat lambat?.tar.gz
(sering disingkat.tgz
) hanya.tar
arsip yang dikompres dengangzip
kompresor.gzip
adalah streaming kompresor yang hanya dapat bekerja dengan satu file. Jika Anda ingin mendapatkan bagian darigzip
aliran, Anda harus membuka kompresi itu secara keseluruhan, dan inilah yang benar-benar membunuhnya untuk.tar.gz
(dan untuk.tar.bz2
,.tar.xz
dan format serupa lainnya berdasarkan.tar
)..tar
format sebenarnya sangat, sangat sederhana. Ini hanya aliran file 512-byte atau header direktori (nama, ukuran, dll), masing-masing diikuti oleh isi file atau direktori (diisi dengan ukuran blok 512 dengan 0 byte jika perlu). Ketika Anda mengamati benar-benar nol blok 512 untuk header, ini berarti akhir.tar
arsip.Beberapa orang berpikir bahwa bahkan
.tar
anggota arsip tidak dapat diakses dengan cepat, tetapi ini tidak sepenuhnya benar. Jika.tar
arsip berisi beberapa file besar, Anda sebenarnya dapat dengan cepat mencari ke tajuk berikutnya, dan dengan demikian Anda dapat menemukan anggota arsip yang diperlukan dalam beberapa upaya (tetapi masih dapat meminta sebanyak yang dicari karena ada anggota arsip). Jika.tar
arsip Anda berisi banyak file kecil, ini berarti pengambilan anggota dengan cepat menjadi tidak mungkin bahkan untuk yang tidak terkompresi.tar
.sumber
Jika Anda mengekstraksi hanya satu file dari file tar besar, Anda menggunakan GNU
tar
, dan Anda dapat menjamin bahwa file tar tidak pernah ditambahkan, maka Anda bisa mendapatkan peningkatan kinerja yang signifikan dengan menggunakan--occurrence
.Opsi ini memberitahu tar untuk berhenti segera setelah menemukan kemunculan pertama dari setiap file yang Anda minta, jadi mis
tidak akan menggulung seluruh tarball setelah menemukan satu salinan dari masing-masing tarball ,
passwd
danshadow
sebaliknya akan berhenti. Jika file-file tersebut muncul menjelang akhir, kenaikan kinerja tidak akan banyak, tetapi jika mereka muncul setengah bahkan melalui file 500G Anda akan menghemat banyak waktu.Bagi orang-orang yang menggunakan
tar
untuk backup single shot dan tidak menggunakan tape drive nyata situasi ini mungkin merupakan kasus khas.Catatan bahwa Anda juga dapat lulus
--occurrence=NUMBER
untuk mengambil terjadinya NUMBERth setiap file, yang membantu jika Anda tahu bahwa ada yang beberapa versi dalam arsip. Secara default perilaku ini sama dengan aNUMBER
dari 1.sumber
--occurrence
akan langsung menendang di file pertama? Saya menduga ini tentang nama file, jadi sesuatu yang disebut aaaaa.jpg akan keluar dulu misalnya?tar
dari terus mencari tarball untuk versi yang lebih baru dari file yang telah ditemukan. Sebaliknya ia kembali, seperti halaman manual mengatakanthe Nth occurrence
,. Jika Anda menentukan satu file untuk mengekstrak pada baris perintah dan Anda katakan--occurrence
maka tar akan keluar segera setelah menemukan file itu, dan dengan demikian secara efektif berhenti di "file pertama."Sayangnya, format file tar tidak mengandung daftar isi terpusat - sehingga arsip harus dibaca secara berurutan untuk menemukan file tertentu. Awalnya dirancang untuk backup tape ("tar" berasal dari t kera ar chive), yang tidak akan mendukung operasi semacam itu dalam hal apa pun.
Jadi, Anda mungkin harus menunggu.
sumber
Saat berhadapan dengan penggunaan tarball besar:
di atas akan mencari sampai menemukan kecocokan dan kemudian keluar
sumber
man tar
(GNU tar 1.29) bahkan tidak mencetak opsi ini. Namun Ubuntu tampaknya telah mengaktifkannya secara default . Membaca dengan cepat, saya tidak yakin apa--fast-read
bedanya--occurrence
. Tapi kemudian--occurrence
bahkan tidak ada di halaman Ubuntu, tetapi diman tar
. Apakah--fast-read
dan--occurrence
hal yang sama mungkin?