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.