เป็นเรื่องแปลกที่ไม่มีใครพูดถึง GNU เวอร์ชันใหม่ที่อนุญาตtar
ให้คุณบีบอัดขณะที่คุณรวมกลุ่ม:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
คุณยังสามารถใช้คอมเพรสเซอร์ที่คุณเลือกได้หากรองรับตัวเลือก ' -c
' (ถึง stdout หรือจาก stdin) และ ' -d
' (คลายการบีบอัด):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
สิ่งนี้จะช่วยให้คุณระบุคอมเพรสเซอร์ทางเลือกอื่น ๆ
[ เพิ่ม : หากคุณกำลังแยกgzip
หรือbzip2
บีบอัดไฟล์ GNU tar
จะตรวจจับสิ่งเหล่านี้โดยอัตโนมัติและเรียกใช้โปรแกรมที่เหมาะสม นั่นคือคุณสามารถใช้:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
และสิ่งเหล่านี้จะได้รับการจัดการอย่างเหมาะสม หากคุณใช้คอมเพรสเซอร์ที่ไม่ได้มาตรฐานคุณจะต้องระบุว่าเมื่อคุณทำการสกัด]
เหตุผลในการแยกก็เช่นเดียวกับในคำตอบที่เลือกคือการแยกหน้าที่ เหนือสิ่งอื่นใดนั่นหมายความว่าผู้คนสามารถใช้cpio
โปรแกรม '' เพื่อบรรจุไฟล์ (แทนtar
) จากนั้นใช้คอมเพรสเซอร์ที่เลือก (กาลครั้งหนึ่งคอมเพรสเซอร์ที่ต้องการคือpack
ในภายหลังcompress
(ซึ่งมีประสิทธิภาพมากกว่าpack
) แล้วgzip
ซึ่งวิ่งแหวนรอบทั้งก่อนหน้าและมีการแข่งขันกันอย่างสิ้นเชิงกับzip
(ซึ่งได้รับการแจ้งความกับ Unix แต่ไม่พื้นเมืองที่นั่น) และตอนนี้ซึ่งในประสบการณ์ของผมมักจะมีข้อได้เปรียบกว่าbzip2
10-20%gzip
[ เพิ่ม : มีคนสังเกตในคำตอบของพวกเขาว่าcpio
มีการประชุมที่ตลก นั่นเป็นความจริง แต่จนกว่า GNU จะtar
มีตัวเลือกที่เกี่ยวข้อง (' -T -
') cpio
เป็นคำสั่งที่ดีกว่าเมื่อคุณไม่ต้องการเก็บถาวรทุกสิ่งที่อยู่ภายใต้ไดเร็กทอรีที่กำหนด - คุณสามารถเลือกไฟล์ที่ถูกเก็บถาวรได้ ข้อเสียของการcpio
คือการที่คุณไม่เพียง แต่สามารถเลือกไฟล์ - คุณมีให้เลือกพวกเขา ยังมีที่เดียวที่cpio
ให้คะแนน มันสามารถทำสำเนาในแหล่งกำเนิดจากลำดับชั้นของไดเร็กทอรีหนึ่งไปยังอีกไดเร็กทอรีหนึ่งโดยไม่ต้องจัดเก็บข้อมูลระดับกลาง:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
อนึ่งการเปิด-depth
ตัวเลือก '' find
มีความสำคัญในบริบทนี้โดยจะคัดลอกเนื้อหาของไดเรกทอรีก่อนที่จะตั้งค่าสิทธิ์ในไดเรกทอรีนั้นเอง เมื่อฉันตรวจสอบคำสั่งก่อนที่จะป้อนส่วนเพิ่มเติมของคำตอบนี้ฉันคัดลอกไดเรกทอรีแบบอ่านอย่างเดียว (สิทธิ์ 555) เมื่อฉันไปลบสำเนาฉันต้องผ่อนคลายสิทธิ์ในไดเรกทอรีก่อนที่ ' rm -fr /new/place
' จะเสร็จสิ้น หากไม่มี-depth
ตัวเลือกcpio
คำสั่งจะล้มเหลว ฉันจำสิ่งนี้ได้อีกครั้งเมื่อฉันไปทำการล้างข้อมูล - สูตรที่ยกมานั้นเป็นไปโดยอัตโนมัติสำหรับฉัน (ส่วนใหญ่เกิดจากการทำซ้ำหลายครั้งในช่วงหลายปี) ]