Як я можу контролювати порядок файлів у архіві ZIP?


14

Бувають випадки, коли потрібно, щоб файли в архіві ZIP були в певному порядку (наприклад, я наразі створюю EPUB , для яких потрібен перший запис у ZIP- mimetypeфайлі). Як це зробити в Windows?

Наразі я використовую 7-Zip в якості архіватора, але не бачу можливості контролю порядку файлів. Це можна зробити за допомогою 7-блискавки? Якщо ні, то які варіанти у мене є?


3
Додаючи їх до того порядку, яким вони повинні бути, слід це зробити. Спробуйте спершу скопіювати файл mimetype, а потім додайте інші файли до zip як другу операцію.
Павло

1
@Paul - Дивно, але це не спрацювало. : - /
Бен Бланк

Можливо, це LIFO? Чи можете ви спробувати додати міметик останнім? Ви перевіряєте правильність читача електронних публікацій, а не просто розпаковуєте?
Павло

3
Програма, яка вимагає, щоб вміст був у визначеному порядку, порушено.
psusi

3
Шееш, авторів специфікації потрібно вивезти назад і побити підказкою на чотири.
psusi

Відповіді:


5

7-zip версія GUI:

  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

Одним із способів було б: Більшість архіваторів та інструментів архіву мають можливість додавати або додавати додаткові елементи файлів до оригінального архіву. Створіть свій архів із потрібними елементами вгорі, а потім додайте до цього створеного архіву додаткові елементи файлів. Я знаю, що це працює у Windows власних інструментах ZIP.

схоже, що реальна відповідь перевершує мене, тут для 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 (або позначки порядку байтів), а регістр типу MIME повинен бути точно таким, як представлено вище. Файл mimetype додатково не повинен бути ні стислим, ні зашифрованим, і в його заголовку ZIP не повинно бути зайвого поля.


1
Я спробував це в 7-zip (створив архів лише mimetype , потім додав інші файли), але успіху не мав. Ці mimetype дані прийшли перші в файлі, але файлова таблиця , здається, алфавітній.
Бен Бланк

2
@BenBlank Переконайтеся, що ви не перевіряєте це за допомогою zip-клієнта - вони перероблять замовлення таким чином, що підходить людям, не обов'язково тому, що побачить читач epub.
Павло

Імовірно, проблема полягає в тому, що 7-Zip любить підтримувати каталог у альфа-порядку, а потім (обов’язково) переписує його, коли він закриває zip-файл. Теоретично це можна виправити, відредагувавши zip-файл за допомогою шестигранного редактора чи якогось спеціального інструменту та переставивши каталог - це не особливо складно. Редагування було б спрощено, включивши фіктивний файл, який завжди сортує спочатку. Але тоді, звичайно, техніка у вищенаведеному посиланні також повинна працювати.
Даніель Р Хікс

Раніше я 7z l filename.zipперераховував вміст поштового індексу, і вони, схоже, не в будь-якому порядку (ім'я, шлях, дата, розмір ...). Отже, використання цього командного рядка може допомогти визначити справжній порядок файлів у zip.
Скотт Маккленінг

@Paul - Я перевіряю, відкриваючи .epubтекстовий редактор і безпосередньо вивчаю таблицю файлів, тому, схоже, такий підхід для мене просто не працює. Я збираюся взяти молоток Python до проблеми і побачити, чи це не вирішить.
Бен Бланк

2

Для створення EPUB необхідний двоступеневий процес: спочатку додайте mimetype без будь-якого (!) Стиснення, після цього додайте інші файли / папки. Отже, використовуючи 7z, ви можете взяти такі команди:

7z a -mx=0 dummy.zip mimetype

Щоб мати змогу використовувати підстановку *, ви повинні перемістити міметик файлу в іншу папку і почати другий крок:

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
Томаш Зато - Відновити Моніку

1

На мій досвід, найпростіша відповідь (для Windows, 7, 64-розрядної) - це використання вбудованого функціоналу Zip у Window. Використовуйте "Надіслати", щоб надіслати mimetype до нової папки з блискавкою, а потім використовуйте 7Zip, щоб додати META-INF та OEBPS до нового zip. Здається, це завжди працює з точки зору послідовності спочатку файлу mimetype. Я не мав успіху виконувати цю операцію виключно з 7-блискавкою. (Це стосується ePUBS, але воно повинно працювати для послідовності в інших областях.)

Я сподіваюся, що це допомагає комусь іншому.


0

Використання winrar зробив для мене трюк. Я додав міметик до zip-архіву (нестиснений!), Потім пізніше додав інші папки, регулярне стиснення.

Це рішення не працювало для 7-zip для мене, оскільки воно продовжує редагувати файли.


0

У мене була така ж проблема при роботі з EPUB-файлами.

У Windows 7 я виправив це за допомогою дивного трюку, коли я переконався, що я сортував усі файли, які збирався внести до zip, таким чином, щоб міметикувати файл зверху (сортуючи їх за розміром, як правило). Потім я переконався, що я позначив усі файли зверху вниз курсором, перш ніж надсилати їх у стиснуту (zip) папку (наприклад: https://support.microsoft.com/en-us/help/14200/ windows-сжати-распакувати-zip-файли ). Після цього я міг змінити ім’я та назву файлу на будь-який .epub.

Однак після оновлення до Windows 10 цей трюк більше не працював. На щастя, я знайшов інший спосіб. Спочатку ви надсилаєте потрібний файл вгорі (mimetype) в zip-файл в стиснуту (zip) папку. Переконайтеся, що це лише той файл. Тоді я беру інші файли, які я хочу зібрати (дві папки в моєму випадку), позначте їх курсором і перетягніть їх до щойно створеного файлу zip. Тоді Windows додасть нові файли до zip-файлу та збереже файл, який ви спочатку зопіювали.


1
Чи можете ви чітко вказати, яка відповідь на запитання автора? Оновлення до Windows 10 насправді не є відповіддю на це питання. Ви повинні зосередитись на тому, як ви виправили це, наведіть конкретику, ваші твердження - це широкий шлях. Якби я відтворив оригінальну проблему, я не зміг би вирішити її з вашою відповіддю.
Рамхаунд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.