Sıkıştırılmadan gzip dosyasının sıkıştırılmamış boyutunu nasıl alabilirim?


25

Lütfen işletim sistemi bilgilerimi bul:

$ uname -a
AIX xxyy 1 6 000145364C00

Gzip arşivinde bir dosyanın boyutunu almak için aşağıdaki komutu denedim:

$ gzip -l mycontent.DAT.Gz
compressed  uncompr.   ratio   uncompressed_name
-1223644243 1751372002 -75.3%  mycontent.DAT.Gz

Sıkıştırılmış boyutun bundan nasıl yorumlanacağından emin değilim. Sıkıştırılmış dosya boyutu 4 GB'a kadar.

Bu nedenle, doğru verileri yakalamak için bu seçeneği denedim:

$ zcat mycontent.DAT.Gz | wc -c

Bana şu hatayı veriyor:

mycontent.DAT.Gz.Z:A file or directory in the path name does not exist.
0

Lütfen kaynak dosyayı açmadan kabuk betiğinden bu değeri nasıl yakalayacağımı söyleyebilir misiniz?


Arşivin bütünlüğünden emin misiniz? Kendi sıkıştırılmış boyutunu ~ 1.7G olarak bildirir. Gerçekten ~ 4GB ise bir sorun olduğunu tahmin ediyorum.
terdon

Yanıtlar:


26

Soru başlığını cevaplamak için:

Sıkıştırılmadan gzip dosyasının sıkıştırılmamış boyutunu nasıl alabilirim?

Açıkça bildiğiniz gibi, -l( --list) seçeneği genellikle sıkıştırılmamış boyutu gösterir.
Gösterdiği veriler verilerden hesaplanmaz, ancak sıkıştırılmış dosyanın bir parçası olarak başlıkta saklanır.

Sizin durumunuzda, -lseçenek herhangi bir nedenden dolayı çalışmıyor.
Ancak, sıkıştırılmamış boyutu ham sıkıştırılmış verilerden 'ölçmek' mümkün değildir - sıkıştırılmış verilerde başka hiçbir şey hakkında bilgi yoktur - bu şaşırtıcı değildir, çünkü sıkıştırma noktası gerekli olmayan herhangi bir şeyi dışarıda bırakmaktır.

Sıkıştırılmamış verileri diskte saklamanıza gerek yoktur: zcat file.gz | wc -cdoğru yaklaşımdır - ancak @OleTange'ın yanıtladığı gibi, sizden zcatdeğil gibi görünüyor gzip.
Alternatif, ( ) ve ( ) gzipseçeneklerini , option ( ) ile birlikte kullanmaktır :-d--decompress-c--to-stdoutwc-c--bytes

gzip -dc file.gz | wc -c

13
-lSeçenek 4GB daha büyük dosyalar için bir hata vardır: bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775
Flimm

6

Sizin zcatGNU zcat ama kompres uzak değildir. Deneyin:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c

Bu, kaynak dosyayı açar. Belki OP'nin istediği budur, ancak sorunun cevabı bu değildir.
Marco

Ah, bu neden .Z ile biten bir dosya aradığını açıklıyor
Hennes

0

gzip -l benim için çalışmadı, sadece git -1 ... ama bu işe yaradı:

unzip -l file.zip

0

Web'deki her şeyi buluyorum ve dosya boyutu 4GB'den büyük olduğunda bu sorunu get boyutunu çözmeyin.

benim çözüm şudur :

[oracle @ base tmp] $ zaman aşımı --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz
    -rw-r - r-- oracle / oinstall 111828 2018-03-03 03:05 oracle.20180303.030001.log
    -rw-r ----- oracle / oinstall 6666911744 2018-03-03 03:05 oracle.20180303.030001.dmp

gz dosyasından toplam boyut almak için:

[oracle @ base tmp] $ echo $ (zamanaşımı --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: basamak:]] *' | awk '{sum + = 1 $} END {baskı toplamı}'
    6667023572

1
Bu sadece tarballs için işe yaradığını açıkladıysanız ve temizlediyseniz (zaman aşımı gerekli değildir ve ikisi de grep değildir) daha iyi bir cevap olacaktır.
kbolino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.