Setelah file di-gzip, apakah ada cara untuk dengan cepat menanyakannya untuk mengatakan apa ukuran file yang tidak dikompresi (tanpa mendekompresinya), terutama dalam kasus di mana file yang tidak dikompresi berukuran> 4GB.
Menurut RFC https://tools.ietf.org/html/rfc1952#page-5 Anda dapat meminta 4 byte terakhir file, tetapi jika file yang tidak dikompresi adalah> 4GB maka nilainya hanya mewakiliuncompressed value modulo 2^32
Nilai ini juga dapat diambil dengan menjalankan gunzip -l foo.gz
, namun kolom "tidak terkompresi" hanya berisi uncompressed value modulo 2^32
lagi, mungkin karena sedang membaca catatan kaki seperti dijelaskan di atas.
Saya hanya bertanya-tanya apakah ada cara untuk mendapatkan ukuran file yang tidak terkompresi tanpa harus mendekompresnya terlebih dahulu, ini akan sangat berguna dalam kasus di mana file gzip berisi 50GB + data dan akan membutuhkan waktu untuk mendekompresi menggunakan metode seperti gzcat foo.gz | wc -c
EDIT: Batasan 4GB secara terbuka diakui di man
halaman gzip
utilitas yang disertakan dengan OSX ( Apple gzip 242
)
BUGS
According to RFC 1952, the recorded file size is stored in a 32-bit
integer, therefore, it can not represent files larger than 4GB. This
limitation also applies to -l option of gzip utility.
sumber
gzip
harus lebih tua dari banyak pengguna di komunitas ini!gzip
keluar pada tahun 1992. Saya akan terkejut jika ada banyak anak berusia 23 tahun berkeliaran di sekitar sini. Saya yakin ada beberapa tetapi dari apa yang saya tahu usia rata-rata adalah sekitar 30-35.xz
yang tidak memiliki batasan itu. GNU beralih kexz
.xz
akan 'menyelesaikan` masalah ini.Jawaban:
Saya percaya cara tercepat adalah memodifikasi
gzip
sehingga pengujian dalam mode verbose menghasilkan jumlah byte yang didekompresi; pada sistem saya, dengan file 7761108684-byte, saya dapatkanUntuk memodifikasi gzip (1.6, seperti yang tersedia di Debian), tambalannya adalah sebagai berikut:
sumber
-t
sudah dioptimalkan dalam hal itu? Peningkatannya cukup kecil untuk membuatnya terlihat seperti Anda hanya menghemat waktu keluaran.gzip
; Saya hanya menjalankangzip
file terkompresi, yang tidak mengkompres ulang mereka, itu hanya memverifikasi mereka. (Patch adalah pembuktian konsep cepat dan kotor, perlu beberapa perubahan lagi untuk dikerjakangunzip
.)FCOMMENT
lapangan. Dengan cara itu pengguna dapat meminta rentang byte untuk mengambil data itu. Ini akan berguna dalam kasus saya, terutama untuk barang-barang yang disimpan di Amazon S3Jika Anda membutuhkan ukuran file terkompresi atau set file, Anda terbaik adalah dengan penggunaan
tar -z
atautar -j
bukangzip
sebagaitar
meliputi terkompresi ukuran file. Gunakanlesspipe
untuk mengintip daftar file:Jika
less
dikonfigurasi untuk digunakanlesspipe
:Hanya perlu diingat bahwa ini bisa memakan waktu yang sangat lama. Namun sistem Anda tetap responsif, yang memungkinkan Anda untuk membunuh proses dekompresi.
Pendekatan lain adalah dengan mencatat rasio terkompresi dan meminta file [teks] itu sebagai gantinya:
Ini membutuhkan perhitungan untuk menemukan ukuran file sebenarnya.
Anda juga bisa melakukan hal yang sama
tar
, yang sebenarnya saya lakukan dengan backup berukuran besar karena mencegah menjalankan seluruh proses dekompresi untuk hanya mendapatkan ukuran atau nama file, misalnya.sumber
tar
Anda memiliki ukuran file asli dicatat dalam arsip. Saya tidak yakinzip
berperilaku berbeda, di sisi lain.wc -c
perintah.Bagaimana dengan
sumber
Ini akan memakan waktu lama, tetapi akan memberi Anda ukuran final dalam byte.
sumber