Silakan temukan detail OS saya:
$ uname -a
AIX xxyy 1 6 000145364C00
Saya sudah mencoba perintah berikut untuk mendapatkan ukuran file di arsip gzip:
$ gzip -l mycontent.DAT.Gz
compressed uncompr. ratio uncompressed_name
-1223644243 1751372002 -75.3% mycontent.DAT.Gz
Tidak yakin bagaimana menafsirkan ukuran ritsleting dari ini. Ukuran file terkompresi mendekati 4 GB.
Jadi, saya mencoba opsi ini untuk mengambil data yang benar:
$ zcat mycontent.DAT.Gz | wc -c
Ini memberi saya kesalahan ini:
mycontent.DAT.Gz.Z:A file or directory in the path name does not exist.
0
Bisakah Anda memberi tahu saya cara menangkap nilai ini dari skrip shell tanpa mendekompresi file sumber?
Jawaban:
Untuk menjawab judul pertanyaan:
Seperti yang Anda ketahui dengan jelas, opsi
-l
(--list
) biasanya menampilkan ukuran yang tidak terkompresi.Apa yang ditampilkan tidak dihitung dari data, tetapi disimpan di header sebagai bagian dari file terkompresi.
Dalam kasus Anda,
-l
opsi tidak berfungsi karena suatu alasan.Tapi itu tidak mungkin untuk 'mengukur' ukuran terkompresi dari data terkompresi mentah - tidak ada informasi tentang hal lain dalam data terkompresi - yang tidak mengejutkan, karena titik kompresi adalah untuk meninggalkan apa pun yang tidak diperlukan.
Anda tidak perlu menyimpan data yang tidak dikompres pada disk:
zcat file.gz | wc -c
adalah pendekatan yang tepat - tetapi ketika @OleTange menjawab, Andazcat
sepertinya bukan yang darigzip
.Alternatifnya adalah menggunakan
gzip
opsi-d
(--decompress
) dan-c
(--to-stdout
), dikombinasikan denganwc
opsi-c
(--bytes
):sumber
-l
pilihan memiliki bug untuk file lebih besar dari 4GB: bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775Anda
zcat
bukan GNU zcat tetapi dari kompres. Mencoba:sumber
gzip -l tidak bekerja untuk saya, hanya git -1 ... tapi ini berhasil:
sumber
Saya menemukan semua situs di web, dan jangan menyelesaikan masalah ini, dapatkan ukuran ketika ukuran file lebih besar dari 4GB.
solusi saya adalah ini :
untuk mendapatkan ukuran total dari file gz:
sumber