ไฟล์ซิปหลายไฟล์ลงในไฟล์เก็บถาวรหลายไฟล์


13

ใช้งาน Linux ฉันมีไดเรกทอรีไฟล์ CSV ขนาดใหญ่ประมาณ 150 ไฟล์; เพียงแค่ทำzip -9กับพวกเขาผลในไฟล์เสาหินที่ยังคงมีขนาดใหญ่เกินไป ฉันต้องการให้ซิปไฟล์เหล่านั้นในไฟล์ zip สี่หรือห้าไฟล์ที่มี 30-40 CSVs แต่ละไฟล์ วิธีนี้การเรียงลำดับหรือเรียงลำดับการซิปจะไม่เป็นปัญหาเนื่องจากการบีบอัดแต่ละครั้งมีความเป็นอิสระ ต้องมีวิธีที่ง่ายในการทำเช่นนี้ ข้อเสนอแนะใด ๆ

(และใช่ซิปเป็นรูปแบบที่ต้องการถ้าเป็นไปได้)

คำตอบ:


23

สวิตช์ไม่เพียงพอหรือไม่ คุณสามารถใช้ zip -s เพื่อแยกไฟล์เป็นไฟล์ที่มีขนาดสูงสุดเช่น:

"zip -s 300m <ไฟล์ 2 gb>" สร้าง:

file.zip (300 mb, master file)
file.001.zip (300 mb)
file.002.zip (300 mb)
file.003.zip (300 mb)
file.004.zip (300 mb)
file.005.zip (300 mb)
file.006.zip (200 mb)

จากนั้น "unzip file.zip" จะทำการรูดทุกอย่างเข้าด้วยกัน


ซิปรุ่นนี้คืออะไร ?? ฉันได้รับfile.z01 file.z02 ... file.zip และunzip file.zipใช้งานไม่ได้โดยตรง (ฉันจะใช้ zip -F เพื่อรวมเข้าด้วยกันก่อน) โปรดทราบว่าสิ่งเหล่านี้ไม่ใช่ "อิสระ" ตามที่ร้องขอ
sourcejedi

1
@sourcejedi: ในคำตอบนี้ ( superuser.com/a/602736/195224 ) เป็นคำอธิบายรายละเอียดเพิ่มเติม
mpy

@mpy ฉันรู้ฉันเพิ่งเขียนคำตอบนั้น :)
sourcejedi

@sourcejedi: โอ้ใช่ตอนนี้คุณบอกว่า ...;)
mpy

2

ใช้split ในรายการไฟล์อินพุต :-)

(ไม่ได้ทดสอบฉันได้รวมคำสั่ง rm สำหรับการล้างข้อมูลดูแล)

ls *.csv > csvfiles
split -d -l30 - csvfiles < csvfiles
for i in csvfiles[0-9][0-9]; do
  zip "$i.zip" -@ < "$i"
done

rm csvfiles
rm csvfiles[0-9][0-9]

ทำไมคุณใช้split -C( --line-bytes) และไม่split -l( --lines) ซึ่งจะสามารถคาดการณ์ได้มากขึ้นโดยพิจารณาจากจำนวนไฟล์ CSV ในไฟล์เก็บถาวรหนึ่งไฟล์
mpy

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