วิธี zip ไฟล์ที่มีขนาด จำกัด


19

ฉันมีสคริปต์ที่ zip ไฟล์จากโฟลเดอร์ ฉันต้องการตรวจสอบให้แน่ใจว่าไฟล์ซิปไม่เกิน 10 MB หากขนาดมากกว่า 10MB ควรสร้างไฟล์ ZIP ไฟล์อื่น

มีคำสั่ง (หรือวิธีอื่น ๆ ) ที่สามารถใช้สำหรับสิ่งนี้ได้หรือไม่?


1
คำถามมีแท็กgzipแต่ข้อความอ้างอิงถึงzipคุณช่วยอธิบายได้ไหม (คำตอบจะถูกแบ่งระหว่างวิธีการตามรูปแบบที่แตกต่างกัน)
Håkan Lindqvist

ฉันไม่สามารถเพิ่ม zip ลงในแท็กนั่นคือเหตุผลที่ฉันใช้ gzip ถ้าคุณมีวิธี gzip ที่ฉันสามารถพอดีกับปัญหานี้ฉันก็สามารถใช้มันได้เช่นกัน
พระนารายณ์

คำตอบ:


21

คุณสามารถใช้ฟังก์ชัน" แยกไฟล์เก็บถาวร " ของ " zip " เองโดยใช้ตัวเลือก " --split-size "

จาก "zip" manpage (" man zip"):

( ... )

การใช้งานไฟล์เก็บถาวรแบบแยกครั้งเดียวเป็นการจัดเก็บไฟล์เก็บถาวรขนาดใหญ่บน
สื่อบันทึกที่สามารถลบได้หลายรายการ สำหรับการแยกไฟล์เก็บถาวรที่มี 20 ไฟล์แยกไฟล์จะถูก
ตั้งชื่อตามปกติ (แทนที่ ARCHIVE ด้วยชื่อไฟล์เก็บถาวรของคุณ) AR‐
CHIVE.z01, ARCHIVE.z02, ... , ARCHIVE.z19, ARCHIVE.zip โปรดทราบว่า
ไฟล์สุดท้ายคือไฟล์. zip

( ... )

-s splitsize - แยก
splitsize ขนาด

ขนาดสปลิตเป็นตัวเลขที่เป็นทางเลือกตามด้วยตัวคูณ
ปัจจุบันจำนวนต้องเป็นจำนวนเต็ม ตัวคูณสามารถ
เป็นหนึ่งใน k (กิโลไบต์), m (เมกะไบต์), g (กิกะไบต์)
หรือ t (เทราไบต์) เนื่องจาก 64k เป็นขนาดการแยกต่ำสุดตัวเลขที่
ไม่มีตัวคูณจะมีค่าเริ่มต้นเป็นเมกะไบต์ ตัวอย่างเช่นในการ
สร้างการแยกเก็บถาวรเรียกว่า foo ด้วยเนื้อหาของ
ไดเรกทอรีบาร์ที่มีการแยก 670 MB ซึ่งอาจเป็นประโยชน์สำหรับการเขียน
บนซีดีคำสั่ง:

                zip -s 670m -r foo bar

สามารถใช้

ดังนั้นในการสร้างไฟล์ zip แบบแยกคุณสามารถทำสิ่งต่อไปนี้ (" -r" คือสวิตช์ "เรียกซ้ำ" เพื่อรวมไดเรกทอรีย่อยของไดเรกทอรี):

$ zip -r -s 10m archive.zip directory/

การเปิดเครื่องรูดแฟ้มที่ " zip" manpage อธิบายว่าคุณควรใช้ "-s 0`" สวิทช์:

( ... )

 zip -s 0 split.zip --out unsplit.zip

จะแปลงไฟล์เก็บถาวรแยกเป็นไฟล์เก็บถาวรไฟล์เดียว

( ... )

ดังนั้นก่อนอื่นคุณ"unsplit" ไฟล์ ZIPโดยใช้สวิตช์ "-s 0":

$ zip -s 0 archive.zip --out unsplit.zip

... และจากนั้นคุณคลายซิปไฟล์ unsplit:

$ unzip unsplit.zip


6
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

จะให้จำนวนไฟล์:

archive.tar.gzaa

archive.tar.gzab

...

ซึ่งสามารถบีบอัดด้วย:

cat archive.tar.* | tar -xzvf -

2

นี่เป็นวิธีที่ฉันทำกับไฟล์ 5GB (แบ่งเป็น 1GB กับ 10MB ตามที่ OP ขอ) ...

ตัวอย่าง:หากต้องการแบ่งไฟล์ 5GBเป็นไฟล์ 1GBเพื่อคัดลอกไปยัง FAT32 USB (ชื่อไฟล์ "FIVE_GB_FILE.ISO")

ขั้นตอนที่ 1:ซิปไฟล์ (ไม่มีการบีบอัดไดเรกทอรีเดียวกันกับแหล่งที่มา)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

ขั้นตอนที่ 2 : แบ่งไฟล์ zip ขนาด 5GB ออกเป็นไฟล์ zip ขนาด 1GB

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

Voila ... คุณควรมีไฟล์ 1GB ต่อไปนี้ (และไฟล์ดั้งเดิมและไฟล์ zip จากขั้นตอนที่ 1)

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