ฉันจะรับขนาด gzip ที่ไม่มีการบีบอัดได้อย่างไรโดยไม่ต้องแตกไฟล์จริง?


25

โปรดหารายละเอียดระบบปฏิบัติการของฉัน:

$ uname -a
AIX xxyy 1 6 000145364C00

ฉันได้ลองคำสั่งต่อไปนี้เพื่อให้ได้ขนาดของไฟล์ในไฟล์เก็บถาวร gzip:

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

ไม่แน่ใจว่าจะแปลขนาดที่บีบอัดไฟล์ได้อย่างไร ขนาดไฟล์บีบอัดใกล้ถึง 4 GB

ดังนั้นฉันลองตัวเลือกนี้เพื่อจับข้อมูลที่ถูกต้อง:

$ zcat mycontent.DAT.Gz | wc -c

มันทำให้ฉันมีข้อผิดพลาดนี้:

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

คุณช่วยบอกวิธีการจับภาพค่านี้จากเชลล์สคริปต์ได้โดยไม่ต้องคลายการบีบอัดไฟล์ซอร์ส?


คุณแน่ใจเกี่ยวกับความถูกต้องของที่เก็บถาวรหรือไม่? มันรายงานขนาดที่บีบอัดของตัวเองเป็น ~ 1.7G ถ้าเป็นจริง ~ 4GB ฉันจะเดาว่ามีปัญหา
terdon

คำตอบ:


26

หากต้องการตอบชื่อคำถาม:

ฉันจะรับขนาด gzip ที่ไม่มีการบีบอัดได้อย่างไรโดยไม่ต้องแตกไฟล์จริง?

ตามที่คุณทราบชัดตัวเลือก-l( --list) มักจะแสดงขนาดที่ไม่บีบอัด
สิ่งที่แสดงไม่ได้คำนวณจากข้อมูล แต่ถูกเก็บไว้ในส่วนหัวเป็นส่วนหนึ่งของไฟล์บีบอัด

ในกรณีของคุณ-lตัวเลือกไม่ทำงานด้วยเหตุผลบางประการ
แต่เป็นไปไม่ได้ที่จะ 'วัด' ขนาดที่ไม่มีการบีบอัดจากข้อมูลที่ถูกบีบอัดแบบดิบ - มีเพียงข้อมูลเกี่ยวกับสิ่งอื่นใดในข้อมูลที่ถูกบีบอัดซึ่งไม่น่าแปลกใจเนื่องจากจุดของการบีบอัดคือ

คุณไม่จำเป็นต้องในการจัดเก็บการบีบอัดข้อมูลบนดิสก์: zcat file.gz | wc -cเป็นวิธีการที่เหมาะสม - แต่เป็น @OleTange ตอบของคุณดูเหมือนว่าจะไม่ได้เป็นหนึ่งจากzcat ทางเลือกกำลังใช้ตัวเลือก( ) และ( ) รวมกับตัวเลือก( ):gzip
gzip-d--decompress-c--to-stdoutwc-c--bytes

gzip -dc file.gz | wc -c

13
-lตัวเลือกที่มีข้อผิดพลาดสำหรับไฟล์ขนาดใหญ่กว่า 4GB A: bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775
Flimm

6

คุณzcatไม่ใช่ GNU zcat แต่มาจากการบีบอัด ลอง:

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

ซึ่งขยายขนาดไฟล์ต้นฉบับ อาจเป็นสิ่งที่ OP ต้องการ แต่นี่ไม่ใช่คำตอบสำหรับคำถาม
Marco

อาอธิบายว่าทำไมมันถึงมองหาไฟล์ที่ลงท้ายด้วย. Z
Hennes


0

ฉันค้นหาทุกสิ่งในเว็บไซต์และไม่แก้ไขปัญหานี้เมื่อขนาดไฟล์ใหญ่กว่า 4GB

ทางออกของฉันคือ :

[oracle @ base tmp] $ timeout --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:

[oracle @ base tmp] $ echo $ (หมดเวลา - สัญญาณ = SIGINT 1 วินาที tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{พิมพ์ $ 3}') | grep -o '[[: หลัก:]] *' | awk '{sum + = $ 1} END {print sum}'
    6667023572

1
นี่จะเป็นคำตอบที่ดีกว่าถ้าคุณอธิบายว่ามันใช้ได้กับ tarballs และคุณล้างมันหมด (หมดเวลาไม่จำเป็นและไม่มี grep)
kbolino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.