วิธีการแตกไฟล์ซิปหลายส่วนบน Windows บน Linux?


73

ฉันต้องอัปโหลดไฟล์ 400mb ไปยังเว็บเซิร์ฟเวอร์ของฉัน แต่ฉัน จำกัด การอัปโหลด 200mb โฮสต์ของฉันแนะนำว่าฉันใช้ไฟล์เก็บถาวรแบบขยายซึ่งฉันไม่เคยทำบน Linux

ฉันสร้างการทดสอบในโฟลเดอร์ของตัวเองซิปขึ้น PDF เป็นtest.zip.001, และ.002 .003ฉันจะทำการขยายไฟล์ได้อย่างไร ฉันจำเป็นต้องเข้าร่วมก่อนหรือไม่

โปรดทราบว่าฉันมีความสุขที่ได้ใช้ 7z อย่างที่ฉันใช้รูปแบบ ZIP หากสิ่งนี้สร้างความแตกต่างให้กับผลลัพธ์


สิ่งนี้อาจไม่เป็นประโยชน์บนเว็บเซิร์ฟเวอร์ที่ติดตั้งซอฟต์แวร์ จำกัด แต่ฉันไม่เห็นวิธีแก้ปัญหานี้ที่อื่นและเป็นสิ่งที่ฉันใช้: java.util.zip API จัดการกับส่วน ZIP ทั้งหมดที่ฉันโยนไป แม้ในกรณีทั่วไปที่ไม่มีชิ้นส่วนต่อท้ายหรือส่วนสุดท้ายไม่สมบูรณ์ ฉันเรียกมันจาก Jython ดังนั้นจึงอยู่ในรูปแบบของสคริปต์และนี่คือรหัส: github.com/combatopera/unzipparts
Andrzej Cichocki

คำตอบ:


74

คุณจะต้องเข้าร่วมก่อน คุณสามารถใช้แอพ linux ทั่วไปได้catดังตัวอย่างด้านล่าง:

cat test.zip* > ~/test.zip

นี้จะเชื่อมทั้งหมดของคุณtest.zip.001, test.zip.002ฯลฯ ไฟล์เป็นหนึ่งที่มีขนาดใหญ่ไฟล์ test.zip เมื่อคุณมีไฟล์เดียวคุณสามารถเรียกใช้unzip test.zip

"วิธีสร้างแยกเข้าร่วมและแยกไฟล์ zip ใน Linux"อาจช่วยได้


1
ตกลงฉันชอบที่ ... ความคืบหน้า ... แต่ฉันเป็น Linux n00b ที่นี่จริงๆ ฉันคิดว่าx*เป็นชื่อไฟล์หรือไม่ และ~/hugefileเป็นไดเรกทอรีหรือไม่? สัญลักษณ์ตัวหนอนคืออะไร ขออภัยที่จะถามสิ่งที่ฉันสงสัยว่าเป็นคำถามพื้นฐานมาก
ทิม

เมื่อคุณแบ่งไฟล์คุณควรใช้คำนำหน้าเช่น x_ (เช่น: x_split1, x_split2, ... ; เช่น windows ต่อท้าย file.001, file.002 ... ฯลฯ ) เครื่องหมายตัวหนอนจะแสดงไดเรกทอรีบ้านของคุณ ~ / hugefile เหมือนกับ / home / tim / hugefile คุณแบ่งไฟล์ของคุณหรือไม่ ชื่อไฟล์ที่แยกคืออะไร
fromnaboo

1
ฉันคิดว่าฉันดูว่าปัญหาจะมาในที่เก็บข้อมูล spanned ถูกสร้างขึ้นในหน้าต่างโดยใช้ 7zip มีนามสกุลไปรษณีย์จึงอัตโนมัติสร้างเป็นTEST.zip.001, TEST.zip.002และTEST.zip.003ซึ่งหมายถึงการแยกแตกต่างกันมาก มันเริ่มที่จะดูเหมือนว่าอาจจะง่ายกว่าที่จะโยน linux บน VMWare และสร้างไฟล์ที่นี่จากนั้นอย่างน้อยฉันก็แค่จัดการกับ 1 OS เท่านั้น คุณสามารถใช้คำสั่ง SPLIT กับไฟล์ชนิดใดก็ได้ เช่นภาพภาพยนตร์เสียง ฯลฯ ?
ทิม

ใช่คำสั่ง split สามารถทำงานกับไฟล์ใดก็ได้ ติดตั้ง p7zip ด้วย apt-get ติดตั้ง p7zip บนเดเบียนหรือ yum ติดตั้ง p7zip บน fedora เข้าร่วมไฟล์ด้วย: cat TEST.zip. *> เก็บถาวรและแตกไฟล์ด้วย
fromnaboo

1
7za x archiveน่าจะดีกว่าถ้าไฟล์เก็บถาวรมีโครงสร้างไดเรกทอรี
slm

38

unzipยูทิลิตี้Linux ไม่สนับสนุนการบีบอัดหลายส่วนจริงๆ จากคู่มือ :

ยังไม่รองรับไฟล์เก็บถาวรแบบหลายส่วนยกเว้นใช้ร่วมกับรหัสไปรษณีย์ (ทุกส่วนจะต้องต่อกันเข้าด้วยกันตามลำดับจากนั้นzip -F (สำหรับ zip 2.x) หรือzip -FF(สำหรับ zip 3.x) จะต้องดำเนินการกับไฟล์เก็บถาวรที่ตัดแบ่งเพื่อ "แก้ไข" นอกจากนี้ zip 3.0 และต่อมาสามารถรวมกันได้ เก็บหลายส่วน (แยก) ลงในไฟล์เก็บถาวรแบบไฟล์เดียวโดยใช้zip -s- inarchive -O outarchiveดูที่หน้าคู่มือ zip 3สำหรับข้อมูลเพิ่มเติม)

ดังนั้นคุณต้องทำการต่อชิ้นส่วนก่อนแล้วจึงซ่อมแซมผลลัพธ์ cat test.zip.*เชื่อมไฟล์ทั้งหมดที่เรียกว่าtest.zip.*wildcard แทน*อักขระต่างๆ ไฟล์จะถูกระบุตามลำดับพจนานุกรมซึ่งเหมือนกับลำดับตัวเลขต้องขอบคุณศูนย์นำหน้า ชี้นำการส่งออกลงในแฟ้ม>test.ziptest.zip

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

หากคุณสร้างชิ้นโดยแยกไฟล์ zip โดยตรงซึ่งต่างจากการสร้าง zip แบบหลายส่วนด้วยยูทิลิตี้ Pkzip อย่างเป็นทางการสิ่งที่คุณต้องทำคือเข้าร่วมส่วนต่างๆ

cat test.zip.* >test.zip
unzip test.zip

1
คำสั่งที่ 2 ควรเป็น zip -FF test.zip --out test-full.zip - จะทำให้คุณมีข้อผิดพลาดโดยไม่มีคำสั่ง --out
อัลวิน

3
สำหรับฉันFFวิธีการทำงานถ้าฉันชี้zipไปที่ไฟล์หลายส่วนแรกไม่catจำเป็น
Jānis Elmeris

1
ดังที่ @ JānisElmerisพูดถึงแล้วไม่จำเป็นต้องต่อกันที่เก็บถาวรก่อนที่จะใช้zip -FFกับพวกเขา
René

24
7z x archive.zip.001

มันจะหาที่เหลือโดยอัตโนมัติ


1
มันแปลกมาก ... สำหรับการทำงานคุณต้องเปลี่ยนชื่อไฟล์ ZIP ทั้งหมด (.zXX และ. zip) เป็น. zip.xxx (.zip เป็นส่วนสุดท้าย) จากนั้นคุณสามารถใช้ 7z x ในส่วนแรก ซึ่ง "แยก" ไปยัง zip ที่ต่อกันซึ่งสามารถแตกอีกครั้งโดยใช้ unzip แต่ไม่ใช่ 7z ... ฉันไม่แน่ใจทั้งหมดหากไฟล์ถูกคลายอย่างถูกต้อง แต่อย่างน้อยคราวนี้ unzip ไม่คอมไพล์เกี่ยวกับข้อผิดพลาด CRC .. . ZIP แตกอย่างไม่น่าเชื่อบน Linux - หลีกเลี่ยงถ้าคุณทำได้ :(
Energiequant

อย่างน้อยสำหรับ centos เราต้องมีคำแนะนำวิธีการติดตั้ง 7z
stiv

20

ฉันพบคำตอบได้ที่นี่: https://superuser.com/a/517758/10264

คำตอบนี้คล้ายกับแนวคิดของGillesนั่นคือก่อนอื่นคุณรวมการแยกเก็บลงในการเก็บถาวรปกติโดยใช้การแยกแล้วคุณแกะมันโดยใช้ unzip

ความแตกต่างคือแทนที่จะใช้-FFแฟล็กซึ่งไม่ได้ผลสำหรับฉันคุณเพียงแค่บอกให้ zip ทำการแบ่งไฟล์แยกโดยไม่ต้องแยก นั่นคือความ-s 0หมายของธง

ดังนั้นก่อนอื่นให้รวมไฟล์เก็บถาวรแบบแยกกับไฟล์เก็บถาวรเดียว:

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

จากนั้นแยกไฟล์เก็บถาวรเดี่ยวโดยใช้ unzip:

unzip unsplit-foo.zip

2
นี่เป็นคำตอบที่ถูกต้องสำหรับ zip 3.x
texasbruce

0

เป็นอีกตัวอย่างหนึ่ง สิ่งนี้ใช้ได้กับฉันในการทุบตีเพื่อแยกตัวติดตั้ง oracle 3GB:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

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

สวัสดีชาวสกอตฉันหวังว่าฉันจะตอบความคิดเห็นได้ แต่ฉันต้องทำตามขั้นตอนเล็ก ๆ น้อย ๆ ในตอนนี้ คำตอบนี้ให้รายการคำสั่งที่สมบูรณ์เพื่อแยกรวมและแตกไฟล์ขนาดใหญ่ในยูนิกซ์ ฉันจะให้ข้อความอธิบายเพิ่มเติมเพื่อชี้แจงคำตอบของฉัน ขอบคุณสำหรับการตอบกลับของคุณ.
TheHagueCoder

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