Làm cách nào tôi có thể kiểm soát thứ tự các tệp trong kho lưu trữ ZIP?


13

Đôi khi các tệp trong kho lưu trữ ZIP phải theo một thứ tự cụ thể (ví dụ: tôi hiện đang tạo EPUB , yêu cầu mục nhập đầu tiên trong ZIP là mimetypetệp). Làm thế nào tôi có thể làm điều này trên Windows?

Tôi hiện đang sử dụng 7-Zip làm người lưu trữ của mình, nhưng tôi không thấy tùy chọn kiểm soát thứ tự tệp. Điều này có thể được thực hiện với 7-zip? Nếu không, tôi có những lựa chọn nào?


3
Thêm chúng theo thứ tự mà chúng cần phải làm điều này. Trước tiên, hãy thử nén tệp mimetype, sau đó thêm các tệp khác vào zip dưới dạng thao tác thứ hai.
Paul

1
@Paul - Đáng ngạc nhiên, điều đó đã không làm việc. : - /
Ben Trống

Có phải LIFO không? Bạn có thể thử thêm mimetype cuối cùng? Bạn đang thử nghiệm với một trình đọc epub phải không, thay vì chỉ giải nén?
Paul

3
Một ứng dụng yêu cầu các nội dung theo một thứ tự cụ thể bị hỏng.
psusi

3
Sheesh, các tác giả của thông số kỹ thuật cần lấy ra và đánh bại với một đầu mối.
psusi

Câu trả lời:


3

Một cách sẽ là: Hầu hết các trình lưu trữ và các công cụ lưu trữ có khả năng chắp thêm hoặc thêm các mục tệp bổ sung vào kho lưu trữ ban đầu. Tạo kho lưu trữ của bạn với các mục bạn muốn ở trên cùng, sau đó thêm các mục tệp bổ sung vào kho lưu trữ đã tạo. Tôi biết điều này hoạt động trong các công cụ ZIP của windows.

có vẻ như câu trả lời thực sự nằm ngoài tôi, ở đây cho C # /programming/5898787/creating-an-epub-file-with-a-zip-l Library

ở đây cho HTML (sử dụng 7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

cụ thể là phần này

2.Mở thư mục sách ảnh mẫu và sao chép tệp mô phỏng vào kho lưu trữ (trống) trước.
3.Bây giờ, sao chép các thư mục khác (META-INF và OEBPS) vào kho lưu trữ.


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

Nội dung của tệp mimetype không được chứa bất kỳ phần đệm hoặc khoảng trắng hàng đầu nào, không được bắt đầu bằng chữ ký Unicode (hoặc Dấu thứ tự Byte) và trường hợp của chuỗi loại MIME phải chính xác như được trình bày ở trên. Ngoài ra, tệp mimetype phải không được nén cũng không được mã hóa và không được có thêm một trường trong tiêu đề ZIP của nó.


1
Tôi đã đưa ra một thử này trong 7-zip (tạo ra một kho lưu trữ với chỉ mimetype , sau đó thêm các tập tin khác), nhưng đã không thành công. Các mimetype dữ liệu đến đầu tiên trong tập tin, nhưng bảng tập tin dường như chữ cái.
Ben Trống

2
@BenBlank Hãy chắc chắn rằng bạn không kiểm tra điều này bằng ứng dụng zip - họ sẽ sắp xếp lại theo cách phù hợp với con người, không nhất thiết là những gì người đọc epub sẽ thấy.
Paul

Có lẽ vấn đề là 7-Zip thích duy trì thư mục của nó theo thứ tự alpha và sau đó (nhất thiết) viết lại khi đóng tệp zip. Về lý thuyết, người ta có thể khắc phục điều này bằng cách chỉnh sửa tệp zip bằng trình soạn thảo hex hoặc một loại công cụ đặc biệt nào đó và sắp xếp lại thư mục - nó không đặc biệt phức tạp. Chỉnh sửa sẽ được đơn giản hóa bằng cách bao gồm một tệp giả luôn luôn sắp xếp đầu tiên. Nhưng sau đó, tất nhiên, kỹ thuật trong liên kết trên cũng nên hoạt động.
Daniel R Hicks

Tôi đã từng 7z l filename.zipliệt kê nội dung của một zip và chúng dường như không theo bất kỳ thứ tự nào (tên, đường dẫn, ngày, kích thước ...). Vì vậy, sử dụng dòng lệnh này có thể giúp xác định thứ tự thực sự của các tệp trong zip.
Scott McClenning

@Paul - Tôi đang kiểm tra bằng cách mở .epubtrình soạn thảo văn bản và kiểm tra trực tiếp bảng tệp, vì vậy có vẻ như cách tiếp cận này đơn giản là không hiệu quả với tôi. Tôi sẽ đưa búa Python vào vấn đề và xem nếu điều đó không khắc phục được.
Ben Trống

3

Phiên bản GUI 7-zip:

  1. trích xuất mimetypetừ tệp EPUB
  2. xóa mimetypetrong tệp EPUB
  3. đổi tên mimetypethành!mimetype
  4. thêm !mimetypevào tệp EPUB
  5. đổi tên !mimetypethành mimetypetập tin EPUB

Phiên bản kéo và thả 7-zip đơn giản:

Chuyển đến trang tải xuống 7-zip và tải xuống 7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(không hoạt động với ổn định 9,20, nhưng hoạt động tốt với 9,38 beta và 15,06 beta). Chiết xuất 7za.exe. Lưu mã dưới đây dưới dạng repair.battệp:

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

Đặt 7za.exerepair.battrong cùng một thư mục và chỉ cần kéo tệp EPUB của bạn vào repair.bat.


2

Tạo một EPUB đòi hỏi một quá trình gồm hai bước, đầu tiên thêm mimetype mà không cần nén (!), Thứ hai thêm các tệp / thư mục khác. Vì vậy, sử dụng 7z bạn có thể thực hiện các lệnh sau:

7z a -mx=0 dummy.zip mimetype

Để có thể sử dụng ký tự đại diện *, bạn nên di chuyển tệp mô phỏng sang thư mục khác và bắt đầu bước thứ hai:

7z a -r dummy.zip *

Sau đó đổi tên ZIP thành EPUB và bạn đã biến mất!


Tôi mới thử cái này và tôi vẫn nhận được lỗi này: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 - Tái lập Monica

1

Theo kinh nghiệm của tôi, câu trả lời đơn giản nhất (dành cho Windows, 7, 64 bit) là sử dụng chức năng Zip tích hợp của Window. Sử dụng "Gửi đến" để gửi mimetype vào thư mục đã nén mới, sau đó sử dụng 7Zip để thêm META-INF và OEBPS vào zip mới. Điều đó dường như luôn luôn hoạt động về mặt sắp xếp thứ tự tệp mimetype. Tôi đã không thành công khi thực hiện thao tác này chỉ với 7-zip. (Cái này dành cho ePUBS, nhưng nó cũng hoạt động, để giải trình tự, trong các lĩnh vực khác.)

Tôi mong điều này giúp được người nào khác.


0

Sử dụng winrar đã lừa tôi. Tôi đã thêm mimetype vào kho lưu trữ zip (không nén!), Sau đó thêm các thư mục còn lại, nén thông thường.

Giải pháp này không hoạt động với 7-zip đối với tôi, vì nó liên tục sắp xếp lại các tệp.


0

Tôi gặp vấn đề tương tự khi làm việc với các tệp EPUB.

Trên Windows 7, tôi đã sửa nó bằng thủ thuật kỳ lạ này, trong đó tôi đảm bảo rằng tôi đã sắp xếp tất cả các tệp mà tôi sẽ tạo thành một zip theo cách tạo ra tệp giống như trên (thường sắp xếp chúng theo kích thước). Sau đó, tôi đảm bảo rằng tôi đã đánh dấu tất cả các tệp từ trên xuống dưới bằng con trỏ của mình trước khi gửi chúng vào thư mục nén (zip) (như thế này: https://support.microsoft.com/en-us/help/14200/ windows-nén-giải nén-zip-tập tin ). Sau đó tôi có thể thay đổi tên và filetype thành bất cứ thứ gì .epub.

Tuy nhiên, sau khi tôi nâng cấp lên Windows 10, thủ thuật này không còn hoạt động nữa. May mắn thay tôi đã tìm thấy một cách khác. Trước tiên, bạn gửi tệp bạn muốn ở trên cùng (mimetype) trong tệp zip đến thư mục nén (zip). Hãy chắc chắn rằng đó chỉ là tập tin đó. Hơn tôi lấy các tệp khác tôi muốn nén (hai thư mục trong trường hợp của tôi) đánh dấu chúng bằng con trỏ và kéo chúng lên tệp zip tôi vừa tạo. Windows sau đó sẽ thêm các tệp mới vào tệp zip và giữ tệp bạn đã nén ban đầu ở trên cùng.


1
Bạn có thể chỉ rõ câu trả lời cho câu hỏi của tác giả là gì không? Nâng cấp lên Windows 10 không thực sự là một câu trả lời cho câu hỏi này. Bạn nên tập trung vào cách bạn sửa nó, cung cấp chi tiết cụ thể, các tuyên bố của bạn là cách để mở rộng. Nếu tôi tái tạo vấn đề ban đầu, tôi sẽ không thể giải quyết nó bằng câu trả lời của bạn.
Ramhound
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.