คำถามติดแท็ก gzip

โปรแกรมบีบอัดข้อมูล เดิมยูทิลิตี้ GNU มันถูกโคลนโดย Unix ส่วนใหญ่


3
จะบอก gzip ให้เก็บไฟล์ต้นฉบับได้อย่างไร
ฉันต้องการบีบอัดไฟล์ข้อความโดยใช้เครื่องมือบรรทัดคำสั่ง gzip ในขณะที่เก็บไฟล์ต้นฉบับไว้ โดยค่าเริ่มต้นเรียกใช้คำสั่งต่อไปนี้ gzip file.txt file.txt.gzผลลัพธ์ในการแก้ไขไฟล์นี้และเปลี่ยนชื่อใหม่ แทนของพฤติกรรมนี้ผมอยากที่จะมีการบีบอัดไฟล์ใหม่นี้ในนอกจากนี้file.txtการที่มีอยู่ ตอนนี้ฉันใช้คำสั่งต่อไปนี้เพื่อทำเช่นนั้น gzip -c file.txt > file.txt.gz มันใช้งานได้ แต่ฉันสงสัยว่าทำไมไม่มีวิธีแก้ปัญหาที่ง่ายกว่าในการทำงานทั่วไป? บางทีฉันอาจพลาดตัวเลือกที่ทำเช่นนั้น?
210 command-line  files  gzip 

4
เหตุใดรูปแบบไฟล์เก็บถาวร tar จึงเปลี่ยนเป็นการบีบอัด xz เพื่อแทนที่ bzip2 และ gzip ล่ะ
tarคลังเก็บมากขึ้นใช้xzรูปแบบตาม LZMA2 สำหรับการบีบอัดแทนการbzip2(bz2)บีบอัดแบบดั้งเดิม ในความเป็นจริงkernel.orgทำให้การประกาศ " Good-bye bzip2 " ล่าช้าเมื่อวันที่ 27 ธันวาคม 2013แสดงว่าแหล่งที่มาของเคอร์เนลจากจุดนี้จะได้รับการปล่อยตัวทั้งในรูปแบบ tar.gz และ tar.xz - และในหน้าหลักของเว็บไซต์tar.xzสิ่งที่นำเสนอโดยตรงอยู่ใน มีเหตุผลเฉพาะที่อธิบายว่าทำไมสิ่งนี้จึงเกิดขึ้นและสิ่งที่เกี่ยวข้องgzipในบริบทนี้คืออะไร?
202 history  gzip  bzip2  xz 


1
คุณจะแตกโฟลเดอร์เดียวจากไฟล์เก็บถาวร tar.gz ขนาดใหญ่ได้อย่างไร
ฉันใช้คำสั่งนี้กับไฟล์เก็บถาวร5GB tar -zxvf archive.tar.gz /folder/in/archive นี่เป็นวิธีที่ถูกต้องในการทำสิ่งนี้หรือไม่? ดูเหมือนว่าจะใช้งานได้ตลอดไปโดยไม่มีเอาต์พุตบรรทัดคำสั่ง ...
132 shell  tar  gzip 

10
จะคลายการบีบอัดข้อมูล zlib ใน UNIX ได้อย่างไร
ฉันได้สร้างข้อมูลที่บีบอัด zlib ใน Python แล้วดังนี้ import zlib s = '...' z = zlib.compress(s) with open('/tmp/data', 'w') as f: f.write(z) (หรือหนึ่งซับในเปลือก: echo -n '...' | python2 -c 'import sys,zlib; sys.stdout.write(zlib.compress(sys.stdin.read()))' > /tmp/data) ตอนนี้ฉันต้องการคลายการบีบอัดข้อมูลในเชลล์ ทั้งzcatมิได้uncompressทำงาน: $ cat /tmp/data | gzip -d - gzip: stdin: not in gzip format $ zcat /tmp/data gzip: …
106 compression  gzip 

4
เพิ่ม / อัปเดตไฟล์ไปยังที่เก็บถาวร tar.gz หรือไม่
มีวิธีเพิ่ม / อัปเดตไฟล์ในไฟล์เก็บถาวร tar.gz หรือไม่ โดยทั่วไปฉันมีไฟล์เก็บถาวรซึ่งมีไฟล์อยู่/data/data/com.myapp.backup/./files/settings.txtและฉันต้องการดึงไฟล์นั้นจากไฟล์เก็บถาวร (เรียบร้อยแล้ว) และดันกลับเข้าไปในไฟล์เก็บถาวรเมื่อทำการแก้ไขเสร็จแล้ว ฉันจะทำสิ่งนี้ได้อย่างไร มันเป็นปัญหา.หรือเปล่าเพราะอยู่ในเส้นทาง?
73 tar  gzip 

10
มีเครื่องมือที่รวม zcat และ cat อย่างโปร่งใสหรือไม่?
เมื่อจัดการกับไฟล์บันทึกบางไฟล์จะลงท้ายด้วยไฟล์ gzipped ต้องขอบคุณlogrotateและบางไฟล์ไม่ใช่ ดังนั้นเมื่อคุณลองทำสิ่งนี้: $ zcat * คุณท้ายด้วยบรรทัดคำสั่งเช่นzcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gzแล้วด้วย: gzip: xyz.log: not in gzip format มีเครื่องมือที่จะใช้เวทย์มนตร์ไบต์คล้ายกับวิธีการfileทำงานและใช้zcatหรือcatขึ้นอยู่กับผลลัพธ์เพื่อให้ฉันสามารถท่อส่งออกไปgrepเป็นตัวอย่าง? NB: ฉันรู้ว่าฉันสามารถเขียนสคริปต์ได้ แต่ฉันกำลังถามว่ามีเครื่องมือที่มีอยู่แล้ว

5
การสกัดน้ำมันดินขึ้นอยู่กับชื่อไฟล์?
ฉันมักจะดาวน์โหลด tarballs ด้วย wget จาก sourceforge.net ไฟล์ที่ดาวน์โหลดจะถูกตั้งชื่อเช่น SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch เมื่อฉันพยายาม tar xzf SQliteManager-1.2.4.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F\&ts\=1305711521\&use_mirror\=switch ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: tar (child): Cannot connect to SQliteManager-1.2.4.tar.gz?r=http: resolve failed gzip: stdin: unexpected end of file tar: Child returned status 128 tar: Error is not recoverable: exiting now หลังจากเปลี่ยนชื่อไฟล์ไปยังfoo.tar.gzการแยกการทำงานที่สมบูรณ์แบบ มีวิธีที่ฉันไม่ได้บังคับให้เปลี่ยนชื่อทุกครั้งที่ไฟล์เป้าหมายก่อนที่จะแตก?
33 shell  tar  gzip 

2
เหตุใดไฟล์เวอร์ชัน gzip จึงสร้างการตรวจสอบ md5 ที่แตกต่างกัน
ฉันมีสี่ไฟล์ที่ฉันสร้างขึ้นโดยใช้ svndump test.svn test2.svn test.svn.gz test2.svn.gz ตอนนี้เมื่อฉันเรียกใช้ md5sum test2.svn test.svn test.svn.gz test2.svn.gz นี่คือผลลัพธ์ 89fc1d097345b0255825286d9b4d64c3 test2.svn 89fc1d097345b0255825286d9b4d64c3 test.svn 8284ebb8b4f860fbb3e03e63168b9c9e test.svn.gz ab9411efcb74a466ea8e6faea5c0af9d test2.svn.gz ดังนั้นฉันจึงไม่เข้าใจว่าทำไมการgzipบีบอัดไฟล์จึงแตกต่างกันเพราะวางเวลาไว้ก่อนที่จะบีบอัด ฉันมีปัญหาที่คล้ายกันmysqldumpเนื่องจากใช้ช่องวันที่ด้านบน
28 gzip  hashsum 

4
วิธีที่เร็วที่สุดในการจัดการขนาดไฟล์ที่ไม่บีบอัดของ GZIPPED ขนาดใหญ่
เมื่อไฟล์ถูก gzipped จะมีวิธีสอบถามอย่างรวดเร็วเพื่อบอกว่าขนาดไฟล์ที่ไม่บีบอัดคืออะไร (โดยไม่ต้องคลายการบีบอัด) โดยเฉพาะอย่างยิ่งในกรณีที่ไฟล์ที่ไม่มีการบีบอัด> 4GB ตาม RFC https://tools.ietf.org/html/rfc1952#page-5คุณสามารถสอบถาม 4 ไบต์สุดท้ายของไฟล์ได้ แต่หากไฟล์ที่ไม่มีการบีบอัดเป็น> 4GB ค่าจะแสดงถึงuncompressed value modulo 2^32 ค่านี้สามารถเรียกคืนได้ด้วยการเรียกใช้gunzip -l foo.gzอย่างไรก็ตามคอลัมน์ "ไม่มีการบีบอัด" จะมีuncompressed value modulo 2^32อีกครั้งซึ่งน่าจะเป็นเพราะมันอ่านส่วนท้ายตามที่อธิบายไว้ข้างต้น ฉันแค่สงสัยว่ามีวิธีการรับขนาดไฟล์ที่ไม่บีบอัดโดยไม่ต้องแตกไฟล์ก่อนซึ่งจะเป็นประโยชน์อย่างยิ่งในกรณีที่ไฟล์ gzipped มีข้อมูล 50GB + และใช้เวลาสักครู่ในการคลายบีบอัดโดยใช้วิธีการเช่น gzcat foo.gz | wc -c แก้ไข:ข้อ จำกัด 4GB ได้รับการยอมรับอย่างเปิดเผยในmanหน้าของgzipยูทิลิตี้ที่มาพร้อมกับ OSX ( Apple gzip 242) BUGS According to RFC 1952, …
24 compression  gzip 

3
gunzip ไฟล์. gz ทั้งหมดในไดเรกทอรี
ฉันมีไดเรกทอรีที่มี.txt.gzไฟล์จำนวนมาก(ที่ชื่อไม่เป็นไปตามรูปแบบเฉพาะ) วิธีที่ง่ายที่สุดสำหรับgunzipพวกเขาคืออะไร? ฉันต้องการที่จะรักษาชื่อเดิมของพวกเขาเพื่อให้พวกเขาไปจากwhatevz.txt.gzการwhatevz.txt
24 gzip 

5
การบีบอัดสตรีมแบบทันทีที่ไม่กระจายไปสู่ทรัพยากรฮาร์ดแวร์?
ฉันมีพื้นที่ว่างบนดิสก์ 200 GB, RAM 16 GB (ที่เดสก์ท็อปและเคอร์เนลประมาณ ~ 1 GB) และ swap 6 GB ฉันมี SSD ภายนอก 240 GB ที่มี 70 GB ใช้1และที่เหลือฟรีซึ่งฉันต้องสำรองข้อมูลลงดิสก์ โดยปกติแล้วฉันต้องการdd if=/dev/sdb of=Desktop/disk.imgดิสก์ก่อนแล้วจึงบีบอัด แต่การสร้างอิมเมจก่อนไม่ใช่ตัวเลือกเนื่องจากการทำเช่นนั้นจะต้องใช้พื้นที่ดิสก์มากกว่าที่ฉันมีแม้ว่าขั้นตอนการบีบอัดจะส่งผลให้พื้นที่ว่างถูกบีบอัดดังนั้น ไฟล์เก็บถาวรสุดท้ายสามารถใส่ลงในดิสก์ของฉันได้อย่างง่ายดาย ddเขียนไป STDOUT โดยค่าเริ่มต้นและgzipสามารถอ่านได้จาก STDIN ดังนั้นในทฤษฎีฉันจะเขียนdd if=/dev/sdb | gzip -9 -แต่gzipจะใช้เวลานานมากในการอ่านไบต์กว่าddสามารถผลิตได้ จากman pipe: ข้อมูลที่เขียนไปยังปลายการเขียนของไพพ์จะถูกบัฟเฟอร์โดยเคอร์เนลจนกว่าจะถูกอ่านจากการอ่านที่ปลายของไพพ์ ฉันเห็นภาพความ|เป็นเหมือนไพพ์จริง - แอปพลิเคชั่นตัวหนึ่งผลักข้อมูลเข้าและอีกอันนำข้อมูลออกจากคิวของไพพ์โดยเร็วที่สุด จะเกิดอะไรขึ้นเมื่อโปรแกรมทางด้านซ้ายเขียนข้อมูลได้เร็วกว่าอีกด้านหนึ่งของไปป์สามารถหวังที่จะประมวลผลได้ มันจะทำให้เกิดการใช้หน่วยความจำมากหรือการแลกเปลี่ยนหรือเคอร์เนลจะพยายามสร้าง FIFO บนดิสก์จึงเติมดิสก์? หรือมันจะล้มเหลวSIGPIPE Broken …
23 pipe  dd  compression  gzip 

4
ฉันจะบีบอัดไฟล์ในสถานที่ได้อย่างไร
ฉันมีเครื่องที่มีการใช้งานฮาร์ดดิสก์ 90% ฉันต้องการบีบอัดไฟล์บันทึก 500+ ไฟล์ให้เป็นไฟล์ใหม่ที่เล็กกว่า อย่างไรก็ตามฮาร์ดดิสก์มีขนาดเล็กเกินไปที่จะเก็บไฟล์ต้นฉบับและไฟล์ที่บีบอัดไว้ ดังนั้นสิ่งที่ฉันต้องการคือการบีบอัดไฟล์บันทึกทั้งหมดเป็นไฟล์ใหม่ทีละไฟล์ลบต้นฉบับเมื่อถูกบีบอัด ฉันจะทำสิ่งนั้นใน Linux ได้อย่างไร

1
ใช้ gzip เพื่อบีบอัดไฟล์ในไดเรกทอรียกเว้นไฟล์. gz ที่มีอยู่แล้ว
ฉันมีสมุดบันทึกที่ผมอยากจะตั้งค่าการงานในการบีบอัดโดยใช้gzip ปัญหาคือฉันไม่ต้องการบีบอัดบันทึกที่ฉันบีบอัดไว้แล้ว ฉันพยายามใช้ls | grep -v gz | gzipแต่ดูเหมือนจะไม่ทำงาน มีวิธีทำเช่นนี้หรือไม่? โดยทั่วไปฉันต้องการ gzip ทุกไฟล์ในไดเรกทอรีที่ไม่ได้ลงท้ายด้วย. gz
19 gzip 

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