ฉันมีสคริปต์ที่ zip ไฟล์จากโฟลเดอร์ ฉันต้องการตรวจสอบให้แน่ใจว่าไฟล์ซิปไม่เกิน 10 MB หากขนาดมากกว่า 10MB ควรสร้างไฟล์ ZIP ไฟล์อื่น
มีคำสั่ง (หรือวิธีอื่น ๆ ) ที่สามารถใช้สำหรับสิ่งนี้ได้หรือไม่?
ฉันมีสคริปต์ที่ zip ไฟล์จากโฟลเดอร์ ฉันต้องการตรวจสอบให้แน่ใจว่าไฟล์ซิปไม่เกิน 10 MB หากขนาดมากกว่า 10MB ควรสร้างไฟล์ ZIP ไฟล์อื่น
มีคำสั่ง (หรือวิธีอื่น ๆ ) ที่สามารถใช้สำหรับสิ่งนี้ได้หรือไม่?
คำตอบ:
คุณสามารถใช้ฟังก์ชัน" แยกไฟล์เก็บถาวร " ของ " 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
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz
จะให้จำนวนไฟล์:
archive.tar.gzaa
archive.tar.gzab
...
ซึ่งสามารถบีบอัดด้วย:
cat archive.tar.* | tar -xzvf -
นี่เป็นวิธีที่ฉันทำกับไฟล์ 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