ฉันไดเรกทอรี gzip บ่อยในที่ทำงาน สิ่งที่ฉันทำตามปกติคือ
tar -zcvf file.tar.gz /path/to/directory
มีวิธีระบุระดับการบีบอัดที่นี่หรือไม่ ฉันต้องการใช้การบีบอัดที่ดีที่สุดเท่าที่จะเป็นไปได้แม้ว่าจะใช้เวลาในการบีบอัดมากกว่าก็ตาม
ฉันไดเรกทอรี gzip บ่อยในที่ทำงาน สิ่งที่ฉันทำตามปกติคือ
tar -zcvf file.tar.gz /path/to/directory
มีวิธีระบุระดับการบีบอัดที่นี่หรือไม่ ฉันต้องการใช้การบีบอัดที่ดีที่สุดเท่าที่จะเป็นไปได้แม้ว่าจะใช้เวลาในการบีบอัดมากกว่าก็ตาม
คำตอบ:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
สมมติว่าคุณกำลังใช้ bash โดยทั่วไปตั้งค่าตัวแปรสภาพแวดล้อม GZIP เป็น "-9" และเรียกใช้ tar ตามปกติ
ถ้าคุณต้องการการบีบอัดที่ดีที่สุดอย่าใช้ gzip ใช้ lzma หรือ 7z
และเมื่อใช้ gzip (ซึ่งเป็นความคิดที่ดีสำหรับการต่างๆของเหตุผลอยู่แล้ว) พิจารณาการใช้โปรแกรมและไม่pigz
gzip
GZIP_OPT
การใช้ควรจะเหมือนกัน
แทนที่จะใช้แฟล็ก gzip สำหรับ tar ให้ gzip ไฟล์ด้วยตนเองหลังจากกระบวนการ tar คุณสามารถระบุระดับการบีบอัดสำหรับโปรแกรม gzip:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
หรือคุณสามารถใช้:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
-9 ในบรรทัดคำสั่ง gzip บอกให้ gzip ใช้ระดับการบีบอัดที่เป็นไปได้สูงสุด (ค่าเริ่มต้นคือ -6)
แก้ไข:แก้ไขบรรทัดคำสั่งไปป์ตามความคิดเห็น @depesz
file.tar
เนื่องจากgzip
เพิ่มส่วนขยาย ".gz"
f -
? หากไม่มีไฟล์แสดงว่าเป็นไฟล์ stdin / out
รุ่นใหม่ของ tar สนับสนุนรูปแบบการเก็บถาวร xz (tar GNU ตั้งแต่ 1.22ในปี 2009, Busybox ตั้งแต่ 1.17.0ในปี 2010)
ก็ขึ้นอยู่กับlzma2 , ชนิดเช่น7-Zipรุ่นGZ สิ่งนี้จะช่วยให้การบีบอัดที่ดีขึ้นถ้าคุณโอเคกับความต้องการของการสนับสนุน xz
tar -Jcvf file.tar.xz /path/to/directory
ฉันเพิ่งพบที่นี่ (โดยทั่วไปแล้วเป็นคำถามของคำถามนี้ แต่ใน Unix stackexchange) ว่ายังมีตัวแปรสภาพแวดล้อม XZ_OPT = -9 เพื่อควบคุมระดับการบีบอัด XZ คล้ายกับ GZIP หนึ่งในโพสต์อื่น
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
นี่เป็นวิธีแก้ปัญหาที่สองของ Matrix Mole แต่สั้นลงเล็กน้อย
เมื่อเรียก tar ตัวเลือกf
ระบุว่าผลลัพธ์เป็นไฟล์ การตั้งค่าให้-
(stdout) ทำให้ tar เขียนออกไปยัง stdout ซึ่งเป็นพฤติกรรมเริ่มต้นโดยไม่ต้องทั้งสองและf
-
และตามที่ระบุไว้ในgzip
man page หากไม่มีไฟล์ที่ระบุ gzip จะบีบอัดจากอินพุตมาตรฐาน ไม่จำเป็นต้องมี-
ในการgzip
โทร
ตัวเลือก--best
(เทียบเท่า-9
) ตั้งค่าระดับการบีบอัดสูงสุด
xz
และpixz
ด้วย เป็นวิธีที่ดีในการควบคุมจำนวนเธรดที่ใช้สำหรับการบีบอัดแบบขนานโดยไม่ต้องสร้างไฟล์. tar ระดับกลาง ชอบมากtar -cv /path/to/dir | pixz -p4 > output.tpxz
นอกจากนี้ยังมีตัวเลือกในการระบุโปรแกรมบีบอัดโดยใช้ -I ซึ่งอาจรวมถึงตัวเลือกระดับการบีบอัด
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
-I
หาเรื่องพวกเขาจะพยายามรักษาทุกสิ่งในฐานะชื่อโปรแกรมที่จะดำเนินการและล้มเหลว อย่างน้อยที่สุดเท่ากับ tar 1.29 ใน Debian Stretch สิ่งนี้ใช้ได้
และแน่นอนว่า tar ที่ได้มาจาก macOS bsd นั้นต้องแตกต่างกัน:
tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory
top
และดูได้โดยใช้ซีพียูระหว่าง 200% -400 $