วิธีการ gzip ไฟล์ทั้งหมดในไดเรกทอรีย่อยทั้งหมดเป็นไฟล์บีบอัดหนึ่งในทุบตี


201

ซ้ำเป็นไปได้:
gzipping ชุดไดเรกทอรีและสร้างไฟล์บีบอัด tar

โพสต์นี้อธิบายถึงวิธีการ gzip แต่ละไฟล์ภายในโครงสร้างไดเรกทอรี อย่างไรก็ตามฉันต้องทำสิ่งที่แตกต่างออกไปเล็กน้อย ฉันต้องการผลิตไฟล์ gzip ขนาดใหญ่หนึ่งไฟล์สำหรับไฟล์ทั้งหมดภายใต้ไดเรกทอรีที่แน่นอน ฉันยังต้องสามารถระบุชื่อไฟล์ที่ส่งออกสำหรับไฟล์บีบอัด (เช่น files.gz) และเขียนทับไฟล์ไฟล์บีบอัดเก่าหากมีอยู่แล้ว


gzipโดยธรรมชาติแล้วมันจะบีบอัดไฟล์เพียงไฟล์เดียว ที่จะนำไฟล์หลายไฟล์เป็นไฟล์เดียวสำหรับ gzipping tarภายหลังการใช้งาน
โทมัส

คำตอบ:


387
tar -zcvf compressFileName.tar.gz folderToCompress

ทุกอย่างในโฟลเดอร์ ToCompress จะไปที่ compressFileName

แก้ไข: หลังจากตรวจสอบและแสดงความคิดเห็นฉันตระหนักว่าผู้คนอาจสับสนกับ compressFileName โดยไม่มีส่วนขยาย หากคุณต้องการคุณสามารถใช้นามสกุล. tar.gz (ตามที่แนะนำ) กับ compressFileName


2
ขอบคุณ สิ่งนี้จะบีบอัดทุกอย่างภายใต้ "folderToCompress" (เช่นเรียกซ้ำ) หรือไม่
Doug

2
ทุกอย่างในโฟลเดอร์ ToCompress จะไปที่ compressFileName
amitchhajer

80
คุณอาจต้องการเลือกcompressFileNameเพื่อรวม.tar.gzส่วนขยายหรือคุณจะทำให้คนอื่นคลั่งไคล้
drewish

9
นอกจากนี้ยังใช้งานได้กับจำนวนไดเรกทอรีโดยพลการเช่นtar -zcvf two-dirs.tar.gz dir-one dir-twoจะสร้างการเก็บถาวรที่มีสองไดเรกทอรี
Zoltán

5
ทำงานร่วมกับ*การบีบอัดทุกอย่างใน dir ปัจจุบันเช่น:tar -zcvf all.tar.gz *

61

มีวิธีการบีบอัดมากมายที่ทำงานบรรทัดคำสั่งแบบเรียกซ้ำและเป็นการดีที่จะรู้ว่าใครคือผู้ชม

นั่นคือถ้ามันจะถูกส่งไปยังใครบางคนที่ใช้ windows แล้ว zip น่าจะดีที่สุด:

zip -r file.zip folder_to_zip

unzip filenname.zip

สำหรับผู้ใช้ linux รายอื่นหรือ tar ของคุณเองนั้นยอดเยี่ยม

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

ต้องระวังด้วย tar และสิ่งที่ tarred ขึ้น / แยกตัวอย่างเช่นถ้าฉันทำงาน

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / MyUserName

tar -xvzf passwd.tar.gz

สิ่งนี้จะสร้าง / home / myusername / etc / passwd

ไม่แน่ใจว่าทาร์ทุกเวอร์ชันทำสิ่งนี้หรือไม่:

 Removing leading `/' from member names

18

โพสต์ของ @amitchhajer ใช้งานได้สำหรับ GNU tar หากมีคนพบโพสต์นี้และต้องการให้ทำงานบนGNUระบบที่ไม่ใช่พวกเขาสามารถทำได้:

tar cvf - folderToCompress | gzip > compressFileName

หากต้องการขยายไฟล์เก็บถาวร:

zcat compressFileName | tar xvf -

2
นอกเหนือจากการพกพาได้โซลูชันนี้มีประโยชน์หากคุณต้องการส่งอาร์กิวเมนต์ไปยัง gzip (เช่น --test หรือ --best) เนื่องจาก afaik แม้แต่ GNU tar ไม่ได้ให้วิธีการส่งอาร์กิวเมนต์ไปยัง gzip
Timothy Woods

สิ่งนี้มีความหลากหลายเนื่องจากคุณสามารถใช้คอมเพรสเซอร์อื่น ๆ ได้ ตัวอย่างเช่นpigzซึ่งเร็วกว่าเนื่องจากสามารถใช้ซีพียูได้ดีขึ้น (การใช้ซิปหลายเธรด)
Ortwin Angermeier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.