ฉันจะ zip / unzip บนบรรทัดคำสั่ง unix ได้อย่างไร


541

ฉันจะสร้างและแยกไฟล์เก็บถาวร zip จากบรรทัดคำสั่งได้อย่างไร


3
@ โจอาคิมคุณควรถามคำถามด้วยคำถามและให้คำตอบในคำตอบ ไม่มีปัญหาในการตอบคำถามของคุณเอง แต่ไม่ได้เป็นส่วนหนึ่งของคำถามตัวเองเนื่องจากข้อได้เปรียบของชุมชนที่ได้รับคะแนนโหวตดีที่สุดคือ SO นอกจากนี้อาจเหมาะกว่าสำหรับ superuser เนื่องจากไม่เกี่ยวข้องกับการเขียนโปรแกรม

2
คุณจะจัดทำเอกสารวิธีการออนไลน์และตรวจสอบดังนั้นถ้าคุณลืมข้อมูลเข้าสู่ระบบของคุณ?

@ rlb.usa: ฉันทำงานในหลาย ๆ ที่บนเซิร์ฟเวอร์ที่แตกต่างกันมากมาย การใช้ SA สำหรับบันทึกย่อเช่นนี้จะช่วยให้คนอื่นเห็นเช่นกัน
joachim

คำตอบ:


663

โดยทั่วไปจะใช้tarเพื่อสร้างการเก็บถาวรที่ไม่ได้บีบอัดและอย่างใดอย่างหนึ่งgzipหรือbzip2เพื่อบีบอัดที่เก็บถาวร คำสั่งที่สอดคล้องกันgunzipและbunzip2สามารถใช้ในการคลายการบีบอัดข้อมูลที่เก็บถาวรหรือคุณสามารถใช้การตั้งค่าสถานะบนtarคำสั่งเพื่อทำการยกเลิกการบีบอัด

หากคุณอ้างอิงถึงรูปแบบไฟล์ซิปคุณสามารถใช้คำสั่งzipและunzip

ในการบีบอัด:

zip squash.zip file1 file2 file3

หรือเพื่อบีบอัดไดเร็กทอรี

zip -r squash.zip dir1

หากต้องการคลายการบีบอัด:

unzip squash.zip

สิ่งนี้คลายซิปในไดเรกทอรีการทำงานปัจจุบันของคุณ


72
ฉันเป็นการส่วนตัวเท่านั้นที่จะใช้zip -r9 archive.zip files...ไวยากรณ์ (-r = recursive -9 = การบีบอัดสูงสุด)
แอมเฟตามาจิ

3
เช่นเดียวกับข้อสังเกตด้านข้าง: zipสามารถสร้างรสชาติที่แตกต่างของคลังเก็บ. ZIP รวมถึงใช้คอมเพรสเซอร์ที่แตกต่างกันมากมาย ในทางกลับกันมีเครื่องมือบีบอัดอื่น ๆ ที่มีชื่อคล้ายกัน: 7-Zip, gzip, bzip2, rzip เป็นต้นซึ่งไม่สามารถใช้แทนกันได้
polemon

5
ในกรณีที่คุณไม่ต้องการให้รวมไดเรกทอรีหลัก:cd dir1; zip -r ../squash.zip *
Marinos An

ฉันสับสนฉันทำสิ่งนี้และรับรายการ inflation และ extractions ที่ยาว แต่เมื่อฉันตรวจสอบไดเรกทอรีว่างเปล่าให้บันทึกไฟล์ zip ต้นฉบับหรือไม่ มันจะไปไหนดี
Summer Developer

11
สำหรับบันทึกให้ใช้unzip -d myfolder squash.zipเพื่อแยกลงในไดเรกทอรีใหม่ที่แยกต่างหาก ( myfolder) แทนที่จะวางไฟล์ทั้งหมดลงในไดเรกทอรีปัจจุบันโดยตรงซึ่งอาจน่ารำคาญหากไฟล์ zip มีไฟล์และไดเรกทอรีจำนวนมากในระดับบนสุด นี่เป็นการเลียนแบบว่าส่วนซิปของเครื่องมือคลายซิปของ UI ทำงานอย่างไร
Alexander Klimetschek

64

มีวิธีที่แตกต่างกันมากมายในการบีบอัดและยกเลิกการบีบอัดภายใต้สัญญาซื้อขายล่วงหน้าของ UNIX ดังนั้นฉันจะสมมติว่าคุณหมายถึง "zip" ในความหมายทั่วไปมากกว่ารูปแบบไฟล์เฉพาะ

คุณสามารถ zip ไฟล์ (ในรูปแบบบีบอัด) ด้วยtarโปรแกรมGNU :

tar -zcvf myfile.tgz .

ซึ่งจะทำไดเรกทอรีปัจจุบัน แทนที่.ด้วยชื่อไฟล์อื่นถ้าคุณต้องการอย่างอื่น

ในการแตกไฟล์ให้ใช้:

tar -zxvf myfile.tgz

แน่นอนว่าคุณมีtarความสามารถในการบีบอัดรวมถึงการรวมไฟล์เป็นหนึ่งเดียว

ถ้าไม่ได้คุณก็สามารถใช้tar cvfตามด้วยgzip(อีกครั้งถ้ามี) สำหรับการบีบอัดและตามมาด้วยgunziptar xvf


สำหรับการจัดการที่เฉพาะเจาะจงของรูปแบบไฟล์ ZIP, ฉันจะแนะนำการดาวน์โหลด7zipและการใช้ว่า - มันตระหนักมากความหลากหลายของรูปแบบไฟล์รวมทั้งหนึ่งไปรษณีย์


หรือใช้tar jcvf file.tar.bz2...ในการบีบอัดในรูปแบบ bzip2 หรือtar Jcvf file.tar.xz ...สำหรับการบีบอัด xz
OldTimer

4
ฉันลงคะแนนคำตอบของคุณเพราะคำถามเกี่ยวกับวิธีจัดการกับไฟล์เก็บถาวร zip ไม่ใช่ไฟล์ tar
ปลาดาว

3
@Starfish ที่อยู่ในสิทธิ์ของคุณขอบคุณอย่างน้อยอธิบายว่าทำไมคนจำนวนมากไม่ใช้เวลาในการทำเช่นนั้น :-) ฉันใช้ "zip" ในความหมายทั่วไป (บีบอัด) มากกว่ารูปแบบเฉพาะ ดังนั้นฉันจะทำให้ชัดเจนยิ่งขึ้น

โปรดระวังว่าไฟล์เก็บถาวร tar อาจทำงานไม่ถูกต้องเมื่อย้ายระหว่างแพลตฟอร์มที่แตกต่างกัน, mac ไปยัง linux หรือกลับกัน Zip ปลอดภัยกว่ามากเนื่องจากทำงานได้อย่างถูกต้องในทุกระบบ
user1751825

ฉันคิดว่าในทางเทคนิคนี่คือ gzip ดังนั้นก็ดี ฉันคิดว่า. เห็นได้ชัดว่าไม่ใช่คำถามที่ถาม
นกฮูก

30

หากคุณไม่ได้ติดตั้งแพ็กเกจ zip และ unzip และคุณมี java คุณสามารถใช้jarเพื่อคลายซิปได้:

jar -xf file.zip

3
ไม่ใช่เซิร์ฟเวอร์ของฉันไม่มีการคลายซิป zip, 7z ไม่มีอะไร ... และสิ่งนี้ใช้ได้ ขอบคุณ!
Dariusz

2
นี่เป็นเคล็ดลับที่ยอดเยี่ยม
ปลาดาว

29

ดีเมื่อมันมาถึงการกระจายไฟล์สำหรับความหลากหลายของระบบปฏิบัติการที่ผมอยากแนะนำให้7-Zip

โดยปกติในแพ็คเกจp7zipคุณจะได้รับ7zและ7zaคำสั่งซึ่งคุณสามารถสร้างคลังเก็บ 7z ของคุณเอง

7zaยังสามารถคลายการบีบอัดไฟล์ zip ( pkzip ) มาตรฐาน ( และสร้างมันขึ้นมาได้ด้วย-tzipสวิตช์)

การบีบอัด:

7za a archive.7z file1 file2 directory/

คลาย:

7za x archive.7z

นอกจากนี้ยังสามารถสร้างคลังข้อมูลแบบขยายตัวเองได้ด้วย-sfxสวิตช์:

7za a -sfx archive.exe files1 file2 dir

ฉันแนะนำวิธีนี้ในกรณีที่ผู้ใช้ Windows ไม่สามารถเปิดไฟล์เก็บถาวร 7z (ในกรณีที่คุณต้องการคำแนะนำเครื่องมือสำหรับ: PeaZip )

หากคุณต้องการใช้อัลกอริทึมการบีบอัดเดียวกันกับ tarball ของคุณให้ใช้-Jสวิตช์ด้วยtar:

tar cJf archive.tar.xz file1 file2 dir

xzเป็นเครื่องมือ UNIX ที่ใช้ LZMA2 สำหรับการบีบอัด แต่ใช้งานgzได้bz2ดี ฯลฯ มันยังทำงานเป็นตัวกรอง

7z ไม่ได้สร้างไฟล์เก็บถาวรที่มีข้อมูลระบบไฟล์เต็มรูปแบบบน UNIX ดังนั้นคุณต้องใช้tarก่อนใช้ 7z (แต่เนื่องจาก 7z เก็บข้อมูลอื่น ๆ เกี่ยวกับtarไฟล์ฉันขอแนะนำให้ใช้xzเนื่องจากมันถูกออกแบบมาเพื่อมัน):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z

2
บางทีฉันควรต่อท้ายคำตอบนี้ด้วยatoolมันเป็นเครื่องมือเล็ก ๆ ที่ดีที่ทำให้การใช้งานคอมเพรสเซอร์ต่าง ๆ สะดวกสบายยิ่งขึ้น ผูกติดกับaและสร้างไฟล์เก็บถาวรกลายเป็นa arc.7z folder/หรือแยกง่ายa arc.7z
polemon

21
unzip <filename>

และ

zip -r archive.zip <filename> [filename]

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


ฉันรู้ว่านี่เป็นด้ายเก่า แต่นี่เป็นคำตอบที่ดีที่สุด ไม่ได้พูดเกี่ยวกับ 7z หรือ tar มันกระชับและตรงประเด็น
Kyle

4

BSD Tar สามารถทำสิ่งนี้ได้เช่นกัน

bsdtar acf bravo.zip alfa.jpg

หรือ:

bsdtar xf bravo.zip

BSD tarมีประโยชน์ในการสนับสนุนค่อนข้างไม่กี่รูปแบบการบีบอัดเพิ่มเติมเมื่อเทียบกับ GNU tarและอื่น ๆtars รับประโยชน์มากที่สุดคือบางทีว่ามันไม่ได้ในขณะที่ใช้tarไวยากรณ์เหมือน คุณก็สามารถใช้7z, unrar, unzipฯลฯ จาก commandline แต่พวกเขาใช้ที่แตกต่างกันไวยากรณ์
njsg

3

คำตอบมากที่สุดคือมาตรฐานpaxซึ่งเป็นที่แนะนำมากกว่าและcpiotar

ซึ่งแตกต่างcpioและ POSIX tarแต่ชอบ GNU tar, paxสามารถทั้งไฟล์ที่เก็บและบีบอัดข้อมูลที่เก็บ พฤติกรรมนี้แตกต่างจากการzipบีบอัดแต่ละไฟล์ก่อนที่จะวางลงในไฟล์เก็บถาวร


1
ไม่paxจดหมายเหตุสนับสนุน zip?
ปลาดาว

ไม่และไม่สนับสนุนpaxคลังเก็บด้วยเช่นกัน!
roblogic

2

ซึ่งครอบคลุมเฉพาะการสกัด

dtrxการที่ผมได้เริ่มต้นที่จะใช้

จุดรวมของมันคือการขจัดความซับซ้อน ดังนั้นคุณเพียงแค่ผ่านการเก็บถาวรใด ๆ ไปแล้วมันจะระบุสิ่งที่ต้องทำกับมัน ซิป, tar, GZ ... ใช้เป็นแบบเดียวกันเสมอ dtrx archive.zip- มันถามคำถามสองสามข้อและคุณทำเสร็จแล้ว

dtrxมีอยู่ในที่เก็บข้อมูลส่วนใหญ่ดังนั้นคุณสามารถapt| yumติดตั้ง


1

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

ในกรณีที่ผมคัดลอกรายชื่อของไฟล์ที่ถูกปรับเปลี่ยนไปยังแฟ้มชั่วคราวและใช้กับตัวเลือกzip-@

สมมติว่าฉันแก้ไขไฟล์ Foo.h, Bar.cc และ TestBar.cc

สมมติว่าฉันสร้างไฟล์ที่ชื่อว่า modified-files.txt ซึ่งเนื้อหาคือ:

Foo.h
Bar.cc
TestBar.cc

ฉันรันคำสั่งต่อไปนี้เพื่อบีบอัดไฟล์เหล่านั้น:

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