ฉันจะควบคุมลำดับของไฟล์ในไฟล์เก็บถาวร ZIP ได้อย่างไร


14

มีบางครั้งที่จำเป็นสำหรับไฟล์ในไฟล์ ZIP ที่จะอยู่ในลำดับที่เฉพาะเจาะจง (ตัวอย่างเช่นฉันกำลังสร้างEPUBsซึ่งต้องการให้รายการแรกใน ZIP เป็นmimetypeไฟล์) ฉันจะทำสิ่งนี้บน Windows ได้อย่างไร

ขณะนี้ฉันใช้7-Zipเป็นผู้จัดเก็บของฉัน แต่ฉันไม่เห็นตัวเลือกสำหรับควบคุมการสั่งซื้อไฟล์ สามารถทำได้ด้วย 7-zip? ถ้าไม่ฉันมีทางเลือกอะไรบ้าง?


3
เพิ่มพวกเขาในลำดับที่พวกเขาจำเป็นต้องทำ ลองซิปไฟล์ mimetype ก่อนจากนั้นเพิ่มไฟล์อื่น ๆ ลงในไฟล์ zip เป็นการดำเนินการที่สอง
พอล

1
@Paul - น่าแปลกที่นั่นไม่ได้ผล : - /
Ben Blank

มันเป็น LIFO หรือเปล่า? คุณลองเพิ่ม mimetype ได้ไหม? คุณกำลังทดสอบตัวอ่าน epub ใช่ไหม?
พอล

3
แอปพลิเคชันที่ต้องการเนื้อหาที่อยู่ในลำดับที่เฉพาะเจาะจงจะใช้งานไม่ได้
psusi

3
Sheesh ผู้เขียนสเป็คจำเป็นต้องนำออกไปและพ่ายแพ้ด้วยเงื่อนงำโดยสี่
psusi

คำตอบ:


5

เวอร์ชั่น GUI 7-zip:

  1. แยกmimetypeจากไฟล์ EPUB
  2. ลบmimetypeในไฟล์ EPUB
  3. เปลี่ยนชื่อmimetypeเป็น!mimetype
  4. เพิ่มลง!mimetypeในไฟล์ EPUB
  5. เปลี่ยนชื่อ!mimetypeเป็นmimetypeไฟล์ EPUB

ง่ายต่อการลากและวาง 7-zip เวอร์ชั่น:

ไปที่หน้าดาวน์โหลด 7-zipและดาวน์โหลด7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(ใช้งานไม่ได้กับ 9.20 แบบเสถียร แต่ทำงานได้ดีกับ 9.38 เบต้าและ 15.06 เบต้า) 7za.exeสารสกัด บันทึกรหัสด้านล่างเป็นrepair.batไฟล์:

7za x %1 mimetype -y
7za d %1 mimetype
move /y mimetype !mimetype
7za a %1 !mimetype
del /f !mimetype
7za rn %1 !mimetype mimetype

ใส่7za.exeและrepair.batในไดเรกทอรีเดียวกันและเพียงแค่ลากไฟล์ EPUB ของคุณrepair.batไป


3

วิธีหนึ่งก็คือ: เครื่องมือจัดเก็บและเก็บถาวรส่วนใหญ่มีความสามารถในการผนวกหรือเพิ่มรายการไฟล์เพิ่มเติมลงในไฟล์เก็บถาวรดั้งเดิม สร้างไฟล์เก็บถาวรของคุณด้วยรายการที่คุณต้องการที่ด้านบนจากนั้นเพิ่มรายการไฟล์เพิ่มเติมลงในไฟล์เก็บถาวรที่สร้างขึ้น ฉันรู้ว่ามันใช้งานได้ในเครื่องมือ ZIP ของ windows

ดูเหมือนว่าคำตอบที่แท้จริงคือเกินฉันที่นี่สำหรับ C # /programming/5898787/creating-an-epub-file-with-a-zip-library

ที่นี่สำหรับ HTML (ใช้ 7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

โดยเฉพาะในส่วนนี้

2. เปิดโฟลเดอร์ตัวอย่างหนังสือภาพถ่ายและคัดลอกไฟล์ชนิดไปยังที่เก็บ (ว่าง) ก่อน
3. ตอนนี้คัดลอกโฟลเดอร์อื่น ๆ (META-INF และ OEBPS) ลงในไฟล์เก็บถาวร


http://idpf.org/epub/30/spec/epub30-ocf.html#physical-container-zip

เนื้อหาของไฟล์ mimetype ต้องไม่มีการเติมเต็มช่องว่างนำหน้าหรือช่องว่างใด ๆ ต้องไม่เริ่มต้นด้วยลายเซ็น Unicode (หรือ Byte Order Mark) และกรณีของสตริงประเภท MIME ต้องตรงตามที่แสดงไว้ด้านบน ไฟล์ mimetype จะต้องไม่ถูกบีบอัดหรือเข้ารหัสและจะต้องไม่มีฟิลด์พิเศษในส่วนหัวของ ZIP


1
ฉันลองทำสิ่งนี้ใน 7-zip (การสร้างไฟล์เก็บถาวรด้วยเท่านั้น mimetypeจากนั้นเพิ่มไฟล์อื่น ๆ ) แต่ก็ไม่ประสบความสำเร็จ mimetype ข้อมูลมาครั้งแรกในแฟ้ม แต่ตารางไฟล์ดูเหมือนว่าจะตามตัวอักษร
Ben Blank

2
@BenBlank ตรวจสอบให้แน่ใจว่าคุณไม่ได้ตรวจสอบสิ่งนี้โดยใช้ไคลเอนต์ zip - พวกเขาจะเรียงลำดับใหม่ในแบบที่เหมาะกับมนุษย์
พอล

สันนิษฐานว่าปัญหาคือ 7-Zip ชอบที่จะคงไว้ซึ่งไดเรกทอรีตามลำดับอัลฟ่าและจากนั้น (จำเป็น) เขียนใหม่เมื่อปิดไฟล์ซิป ในทางทฤษฎีสามารถแก้ไขได้โดยแก้ไขไฟล์ zip ด้วย hex editor หรือ ad-hoc tool และเรียงลำดับไดเรกตอรีใหม่ - มันไม่ซับซ้อนโดยเฉพาะ การแก้ไขจะง่ายขึ้นโดยการรวมไฟล์ดัมมีที่เรียงลำดับก่อนเสมอ แต่แน่นอนว่าเทคนิคในลิงก์ด้านบนควรใช้งานได้เช่นกัน
Daniel R Hicks

ฉันใช้7z l filename.zipเพื่อแสดงรายการเนื้อหาของ zip และดูเหมือนว่าจะไม่อยู่ในลำดับใด ๆ (ชื่อเส้นทางวันที่ขนาด ... ) ดังนั้นการใช้บรรทัดคำสั่งนี้อาจช่วยกำหนดลำดับที่แท้จริงของไฟล์ในไฟล์ zip
Scott McClenning

@Paul - ฉันกำลังตรวจสอบโดยการเปิด.epubตัวแก้ไขข้อความและตรวจสอบตารางไฟล์โดยตรงดังนั้นดูเหมือนว่าวิธีการนี้จะไม่ทำงานสำหรับฉัน ฉันจะใช้ค้อน Python กับปัญหาและดูว่ามันไม่สามารถแก้ไขได้
Ben Blank

2

การสร้าง EPUB นั้นต้องการกระบวนการสองขั้นตอนเพิ่ม mimetype ก่อนโดยไม่มีการบีบอัด (!) ที่สองเพิ่มไฟล์ / โฟลเดอร์อื่น ดังนั้นการใช้ 7z คุณสามารถใช้คำสั่งต่อไปนี้:

7z a -mx=0 dummy.zip mimetype

เพื่อให้สามารถใช้ wildcard * คุณควรย้ายไฟล์ชนิดไปยังโฟลเดอร์อื่นและเริ่มขั้นตอนที่สอง:

7z a -r dummy.zip *

หลังจากนั้นเปลี่ยนชื่อ ZIP เป็น EPUB แล้วคุณก็หายไป!


ฉันเพิ่งลองสิ่งนี้และฉันยังได้รับข้อผิดพลาดนี้:Epubcheck Version 3.0.1 ERROR: C:/MYSELF/Books/1984---George-Orwell/1984---George-Orwell.epub: Mimetype entry missing or not the first in archive
Tomáš Zato - Reinstate Monica

1

จากประสบการณ์ของฉันคำตอบที่ง่ายที่สุด (สำหรับ Windows, 7, 64 บิต) คือการใช้ฟังก์ชัน Zip ในตัวของ Window ใช้ "ส่งไปยัง" เพื่อส่งชนิด mime ไปยังโฟลเดอร์ซิปใหม่จากนั้นใช้ 7Zip เพื่อเพิ่ม META-INF และ OEBPS ไปยังรหัสไปรษณีย์ใหม่ ที่ดูเหมือนว่าจะทำงานในแง่ของการเรียงลำดับไฟล์ mimetype ก่อนเสมอ ฉันไม่ได้ประสบความสำเร็จในการดำเนินการกับ 7-zip เพียงอย่างเดียว (สิ่งนี้ใช้สำหรับ ePUBS แต่ควรใช้สำหรับการเรียงลำดับในพื้นที่อื่นเช่นกัน)

ฉันหวังว่านี่จะช่วยคนอื่นได้


0

การใช้ WinRAR ช่วยฉันได้ไหม ฉันเพิ่มชนิด mime ลงในไฟล์ zip- บีบอัด (ไม่บีบอัด!) จากนั้นเพิ่มโฟลเดอร์ที่เหลือ, การบีบอัดปกติ

วิธีแก้ปัญหานี้ใช้ไม่ได้กับ 7-zip สำหรับฉันเพราะมันทำการจัดเรียงไฟล์ใหม่


0

ฉันมีปัญหาเดียวกันนี้เมื่อทำงานกับไฟล์ EPUB

ใน Windows 7 ฉันแก้ไขด้วยเคล็ดลับแปลก ๆ นี้ที่ฉันทำให้แน่ใจว่าฉันเรียงลำดับไฟล์ทั้งหมดที่ฉันจะทำใน zip ในวิธีที่ทำให้แฟ้มนั้นอยู่ด้านบน (เรียงตามขนาดปกติ) จากนั้นฉันตรวจสอบให้แน่ใจว่าฉันทำเครื่องหมายไฟล์ทั้งหมดจากบนลงล่างด้วยเคอร์เซอร์ก่อนที่จะส่งไปยังโฟลเดอร์บีบอัด (zip) (เช่นนี้: https://support.microsoft.com/en-us/help/14200/ windows-compress-uncompress-zip-files ) หลังจากนั้นฉันสามารถเปลี่ยนชื่อและ filetype กับสิ่งที่ .epub

อย่างไรก็ตามหลังจากฉันอัพเกรดเป็น Windows 10 เคล็ดลับนี้ไม่ทำงานอีกต่อไป โชคดีที่ฉันได้พบวิธีอื่น ก่อนอื่นคุณส่งไฟล์ที่คุณต้องการที่ด้านบน (mimetype) ในไฟล์ zip ไปยังโฟลเดอร์บีบอัด (zip) ตรวจสอบให้แน่ใจว่าเป็นไฟล์นั้นเท่านั้น กว่าที่ฉันจะใช้ไฟล์อื่น ๆ ที่ฉันต้องการซิป (สองโฟลเดอร์ในกรณีของฉัน) ทำเครื่องหมายด้วยเคอร์เซอร์และลากไปยังไฟล์ zip ที่ฉันเพิ่งสร้าง Windows จะเพิ่มไฟล์ใหม่ลงในไฟล์ zip และเก็บไฟล์ที่คุณซิปไว้ด้านบนไว้


1
คุณสามารถระบุได้อย่างชัดเจนว่าคำตอบของคำถามของผู้แต่งคืออะไร? การอัพเกรดเป็น Windows 10 ไม่ใช่คำตอบสำหรับคำถามนี้ คุณควรจดจ่อกับวิธีที่คุณแก้ไข, ให้ข้อมูลเฉพาะ, ข้อความของคุณเป็นวิธีที่กว้าง ถ้าฉันจะทำให้เกิดปัญหาเดิมฉันจะไม่สามารถแก้ไขได้ด้วยคำตอบของคุณ
Ramhound
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.