ตัวเลือกที่ดีที่สุดที่จะใช้เมื่อบีบอัดไฟล์โดยใช้ 7 Zip คืออะไร


59

ฉันมักจะต้องรวบรวมล็อกไฟล์และอัปโหลดไปยังเซิร์ฟเวอร์กลาง (เป็นของ บริษัท อื่น) เซิร์ฟเวอร์กลางมีขนาด จำกัด ของไฟล์ดังนั้นฉันพยายามสร้างไฟล์ที่เล็กที่สุดเท่าที่จะเป็นไปได้ซึ่งยังอยู่ในรูปแบบ zip

การตั้งค่าที่ดีที่สุดที่จะใช้เมื่อบีบอัดไฟล์ข้อความเป็นรูปแบบ zip คือเมื่อฉันต้องการเพียงไฟล์ขนาดเล็ก?

7zip ตัวเลือก

ฉันได้ทำการบีบอัดอย่างชัดเจนและเลือกแล้วและฉันสังเกตเห็นว่า LZMA ทำงานได้ดีกว่าการยุบ แต่ก็มีตัวเลือกอื่น ๆ มากมายสำหรับฉันที่จะทดสอบพวกเขาทั้งหมด


1
มีการแบ่งไฟล์ zip ไว้ในหลาย ๆ ไฟล์หรือไม่?
JaredMcAteer

@ ดั้งเดิมฉันไม่คิดอย่างนั้น (นั่นคือตัวเลือก 'แบ่งเป็นปริมาณ' ใช่หรือไม่) ฉันต้องการให้มันง่ายและมีเพียง 1 ไฟล์ ถ้าฉันต้องการจริงๆฉันสามารถแยกไฟล์ต้นฉบับ (ซึ่งฉันเคยทำมาแล้ว) แต่เป้าหมายของฉันคือเก็บไฟล์ไว้ในไฟล์เดียว
jjnguy

โอ้และฉันเห็นคำถามนี้superuser.com/questions/178111/…แต่จริงๆแล้วมันไม่ได้ตอบคำถามของฉันเลย
jjnguy

ฉันคิดว่าคำถามที่แน่นอนที่คุณถามไม่สามารถตอบได้ ไฟล์ข้อความบางไฟล์บีบอัดได้ดีกว่าด้วยอัลกอริธึมที่แตกต่างกัน บางครั้ง zip ดีกว่าบางครั้ง gzip; บางครั้งระดับการบีบอัดสร้างความแตกต่างและบางครั้งก็ไม่ ทุกอย่างขึ้นอยู่กับไฟล์ ดังนั้นแทนที่จะตอบคำถามที่แม่นยำฉันได้กล่าวถึงตัวอย่างแรงจูงใจซึ่งเกี่ยวข้องกับขนาดสูงสุดที่อนุญาต แม้ว่าคุณจะมีอัลกอริทึมที่ดีที่สุด แต่ก็ยังถูก จำกัด ด้วยขนาดและบันทึกขนาดใหญ่โดยเฉพาะอาจไม่สามารถบีบอัดได้ต่ำกว่าเกณฑ์ดังกล่าวดังนั้นคุณจะต้องแยกออกไป
Rob Kennedy

2
ทันทีที่คุณเลือกอะไรก็ได้นอกจากDeflateรูปแบบแล้วมันไม่ใช่ไฟล์. zip แบบ "ปกติ" อีกต่อไป แต่เป็นไฟล์ซิป "ขยาย" ที่บุกเบิกโดย WinZip แต่เดิมพวกเขาเก็บนามสกุลเป็น. zip ไปจนถึงความตกตะลึงมาก (เนื่องจากเครื่องมือจัดการซิปทั่วไปส่วนใหญ่ไม่สามารถจัดการกับมันได้) แต่ผู้จัดเก็บส่วนใหญ่ใช้. zip ในตอนนี้เพื่อแยกพวกเขาออกจากไฟล์. zip แบบดั้งเดิม หากคุณสามารถใช้ LZMA ให้เปลี่ยนเป็น. 7z และเลือก PPMd - ควรบีบอัดไฟล์ข้อความได้ดีขึ้น (และเร็วกว่า!)
afrazier

คำตอบ:


60

หากต้องการสร้างไฟล์ ZIP มาตรฐานที่เล็กที่สุดที่ 7-Zip สามารถสร้างได้ให้ลอง:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

ที่มา: ฉันจะบรรลุการบีบอัด ZIP มาตรฐานที่ดีที่สุดได้อย่างไร

มิฉะนั้นถ้าคุณไม่สนใจมาตรฐาน ZIP ให้ใช้การตั้งค่าพิเศษต่อไปนี้:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

ซึ่งคือ:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on

2
@ เทค: ทำไม มันไม่ดีเลย คำถามเกี่ยวกับการใช้ "รูปแบบ ZIP มาตรฐาน" ดังนั้นคำตอบไม่ควรระบุ LZMA -ms = on ใช้สำหรับ. 7z ไม่ใช่ไฟล์ zip มาตรฐาน -md เกี่ยวข้องกับ BZip2 ดังนั้นฉันไม่คาดหวังว่าจะมีผลกับ ZIP (หรือแม้แต่ LZMA) -mfb = 64 เป็นค่าที่ไม่ได้เพิ่มประสิทธิภาพ: -mfb = 258 ทำให้ไฟล์ zip มีขนาดเล็กลง และคำตอบนี้ไม่ได้พูดถึง -mpass = 15 ซึ่งสามารถส่งผลกระทบต่อไฟล์ zip นี่เป็นคำตอบที่ถูกจัดรูปแบบอย่างน่าเสียดายที่ผิดในหลาย ๆ
TOOGAM

5
ฉันจะใช้ lzma2
Lance Badger

@ เบอร์ใช่ถูกต้องแล้ว แก้ไขข้อผิดพลาด
kenorb

หากคุณดูคำถามที่พบบ่อย 7-zip มันระบุว่า 7z เวอร์ชั่นใหม่อาจมีประสิทธิภาพที่แย่กว่าเวอร์ชั่นเก่าในบางสถานการณ์ อ่านคำถามที่พบบ่อยสำหรับรายละเอียดเพิ่มเติม แต่ในระยะสั้นใช้ 'qs' ในฟิลด์พารามิเตอร์ใน GUI หรือใช้ -mqs ในเวอร์ชันบรรทัดคำสั่งเพื่อใช้การเรียงลำดับแบบเก่าตามวิธีการขยายไฟล์ 7-zip.org/faq.html
drojf

12

หากคุณสามารถใช้รูปแบบ. 7z แทนที่จะเป็นเพียงแค่. zip ฉันจะใช้PPMDกับตัวเลือกต่อไปนี้และปล่อยให้ทุกอย่างเป็นไปตามที่กำหนดโดยระดับการบีบอัด:

  • รูปแบบไฟล์เก็บถาวร: 7z
  • วิธีการบีบอัด: PPMD
  • ระดับการบีบอัด: อัลตร้า

ฉันบีบอัดบันทึกเซิร์ฟเวอร์ / ข้อความ (60MB +) เป็นประจำโดยใช้ตัวเลือกเหล่านี้และพวกเขามักจะออกมาที่1-2%ของขนาดดั้งเดิม


สำหรับข้อความเช่นล็อกไฟล์ ppmd เป็นวิธีที่แน่นอน อย่างไรก็ตามคำถามดังกล่าวจำเป็นต้องอยู่ในรูปแบบ zip ซึ่งอาจใช้งานไม่ได้กับ PPMD
Brian Minton

เพิ่งลอง zip ด้วย PPMD ​​และ Windows Explorer จะเปิดเนื้อหาขึ้นโดยไม่มีการร้องเรียนที่นี่ใน Windows 7
Umber Ferrule

2
ฉันก็สังเกตเห็นเช่นกัน มันเปิดเนื้อหาได้ดี อย่างไรก็ตามเมื่อฉันพยายามดูไฟล์ใดไฟล์หนึ่งภายในไฟล์ zip มันล้มเหลว
Brian Minton

อาจจะทำงานได้ดีขึ้นสำหรับไฟล์ข้อความ แต่สำหรับผมไม่ได้ทำงานที่ดีกว่าการบีบอัดโครงการ C # (ข้อความ + DLL)
ริกา

2
ทำไม PPMD ​​ที่เหนือกว่าวิธีบีบอัดไฟล์ข้อความ?
user598527

7

ฉันเปรียบเทียบ db.fdb 1,2 GB (1236598784 B) ในเซิร์ฟเวอร์ Ubuntu 14.04.03 กับ p7zip [64] 9.20 บน VM:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

และมีผลลัพธ์ที่:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

ฉันคิดว่าวิธีที่สองทำงานได้ดี = (เกือบ) บีบอัดที่ดีที่สุดด้วยเวลาที่ดีที่สุด แต่เพื่อให้ได้ "มุมมอง" ที่ดีที่สุดและจดจำได้ง่ายคือวิธีแรก - ด้วยไฟล์ขนาดเล็กและไม่มีการบีบอัดสูงสุด ระหว่างวิธีที่ 2 และ 3 เราจะไม่ได้รับขนาดเล็กกว่า 7z แต่จ่ายเวลาในการบีบอัดเกือบสองครั้ง ทุกคนตัดสินใจด้วยตัวเขาเอง


6

หลังจากการทดลองมากมายให้ขุดลงในเอกสารรายละเอียด 7zip และอ่านซอร์สโค้ด 7z บางส่วนเกี่ยวกับพารามิเตอร์ LZMA2 ขั้นสูงนี่เป็นวิธีที่ดีกว่าด้านล่าง มันลดบางไฟล์ทดสอบจริง 1GB มากกว่า 2 ถึง 4 เท่าดีกว่าโซลูชันที่ยอมรับก่อนหน้านี้ที่โพสต์ที่นี่หรือแม้แต่ใน manz 7z

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

การบีบอัด LZMA2 ถูกสันนิษฐานไว้ที่นี่ แต่คุณอาจได้รับประสิทธิภาพที่ดียิ่งขึ้นใน 7zip ด้วยการผ่านตัวเลือก LZMA2 ขั้นสูงเช่น-m0=LZMA2:27หรือ-m0=LZMA2:d25พารามิเตอร์แบบต่างๆ

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

ดูเหมือนว่าพารามิเตอร์ดังกล่าวจะไม่ได้รับการเคารพจากรุ่น 7z ที่ฉันทดสอบ แต่คุณอาจต้องการสำรวจเพิ่มเติมหรือแก้ไขรหัส 7z เพื่อวิเคราะห์คำเหล่านั้นอย่างถูกต้อง หรือบางทีมันควรจะทำงานและเสียในงานสร้างที่ผ่านการทดสอบ


ว้าวนี่สร้างความแตกต่างที่ยิ่งใหญ่จริงๆ สำหรับที่เก็บถาวรของฉันฉันได้ทดลองกับคำแนะนำอื่น ๆ มากมายรวมถึงคำตอบอื่น ๆ ที่นี่และผลลัพธ์ที่ดีที่สุดที่ฉันได้รับคือ 99MB เทียบกับ 85MB โดยใช้การตั้งค่าเหล่านี้
user9399

0

ตั้งค่าฟิลด์ "แยกเป็นปริมาณไบต์" เป็นขนาดไฟล์สูงสุดที่อนุญาตของเซิร์ฟเวอร์ (ในหน่วยไบต์ฉันคิดว่าถึงแม้ดูเหมือนว่าจะยอมรับตัวย่อทั่วไปเช่น "KB" และ "MB") หากไฟล์ zip มีขนาดเกินขนาด 7-zip จะแบ่งออกเป็นหลาย ๆ ไฟล์โดยอัตโนมัติเช่นintegration_serviceLog.zip.001 , integration_serviceLog.zip.002เป็นต้น (ย้อนกลับไปเมื่อ PK Zip ใช้วิธีนี้เพื่อขยายไฟล์ zip หลาย ๆ ไฟล์ ฟลอปปี้ดิสก์.) คุณจะต้องมีไฟล์ทั้งหมดเพื่อนำมาเปิดเครื่องรูด ใช้สิ่งนั้นแทนการกังวลเกี่ยวกับการตั้งค่าการบีบอัดที่ดีที่สุดที่จะใช้กับชุดไฟล์ใด ๆ เพราะสิ่งที่ดีที่สุดสำหรับไฟล์หนึ่งไฟล์อาจแตกต่างกันไปสำหรับไฟล์อื่นและคุณไม่จำเป็นต้องทำสิ่งนี้ทุกครั้งที่ต้องการ คัดลอกบันทึก


1
ฉันกังวลเกี่ยวกับวิธีที่ผู้คนในอีกด้านหนึ่งจะคลายการบีบอัดไฟล์ ฉันต้องการให้มันง่ายที่สุดสำหรับพวกเขา คุณรู้หรือไม่ว่าคุณสามารถแตกไฟล์ที่แยกได้โดยใช้ zip ในตัวหรือ gzip
jjnguy

เห็นได้ชัดว่าไม่มีคุณสมบัติซิปโฟลเดอร์ Windows ในตัวไม่ได้ทำการขยายไฟล์ซิป แย่มากเนื่องจากเป็นคุณลักษณะมาตรฐานของรูปแบบมาก่อน Windows 3 ฉันจะประหลาดใจมากถ้า gzip ทำไม่ได้ WinZip สามารถทำได้อย่างแน่นอน
Rob Kennedy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.