Jak mogę kontrolować kolejność plików w archiwum ZIP?

14

Są chwile, kiedy konieczne jest, aby pliki w archiwum ZIP były w określonej kolejności (na przykład obecnie tworzę EPUB , które wymagają, aby pierwszy wpis w ZIP był mimetypeplikiem). Jak mogę to zrobić w systemie Windows?

Obecnie używam 7-Zip jako mojego archiwizatora, ale nie widzę opcji kontrolowania kolejności plików. Czy można to zrobić za pomocą 7-suwaków? Jeśli nie, jakie mam opcje?

Ben Blank
źródło
3
Należy to zrobić, dodając je w kolejności, w jakiej powinny być. Spróbuj najpierw skompresować plik mimetype, a następnie dodać inne pliki do zip jako drugą operację.
Paul
1
@Paul - Zaskakujące, że to nie zadziałało. : - /
Ben Blank
Czy to może LIFO? Czy możesz spróbować dodać typ mimetyczny jako ostatni? Testujesz przeciwko czytnikowi epub, a nie tylko rozpakowaniu?
Paul
3
Aplikacja wymagająca uporządkowania zawartości w określonej kolejności jest uszkodzona.
psusi
3
Sheesh, autorzy specyfikacji muszą zostać wycofani i pobici wskazówką po czterech.
psusi

Odpowiedzi:

5

Wersja 7-zip GUI:

  1. wypakuj mimetypez pliku EPUB
  2. usuń mimetypew pliku EPUB
  3. zmień nazwę mimetypena!mimetype
  4. dodaj !mimetypedo pliku EPUB
  5. zmień nazwę !mimetypena mimetypewewnątrz pliku EPUB

7-zip prosta wersja przeciągnij i upuść:

Przejdź do strony pobierania 7-zip i pobierz 7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(nie działa ze stabilną wersją 9.20, ale działa dobrze z wersją 9.38 beta i 15.06 beta). Wyciąg 7za.exe. Zapisz kod poniżej jako repair.batplik:

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

Put 7za.exea repair.batw tym samym katalogu i po prostu przeciągnij plik EPUB na repair.bat.

Tithen-Firion
źródło
3

Jednym ze sposobów byłoby: Większość archiwizatorów i narzędzi do archiwizacji ma możliwość dołączania lub dodawania dodatkowych elementów do oryginalnego archiwum. Utwórz swoje archiwum z elementami, które chcesz u góry, a następnie dodaj dodatkowe pliki elementów do utworzonego archiwum. Wiem, że działa to we własnych narzędziach ZIP.

wygląda na to, że prawdziwa odpowiedź jest poza mną, tutaj dla C # /programming/5898787/creating-an-epub-file-with-a-zip-library

tutaj dla HTML (przy użyciu 7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

konkretnie ta część

2. Otwórz folder przykładowej fotoksiążki i najpierw skopiuj typ pliku do (pustego) archiwum.
3. Teraz skopiuj pozostałe foldery (META-INF i OEBPS) do archiwum.


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

Zawartość pliku mimetype nie może zawierać żadnych wiodących dopełnień ani białych znaków, nie może zaczynać się od podpisu Unicode (lub znaku kolejności bajtów), a wielkość liter ciągu typu MIME musi być dokładnie taka, jak przedstawiono powyżej. Dodatkowo plik mimetype nie może być ani skompresowany, ani zaszyfrowany, aw nagłówku ZIP nie może znajdować się dodatkowe pole.

Psycogeek
źródło
1
Próbowałem w wersji 7-zip (tworzenie archiwum tylko mimetype , a następnie dodawanie innych plików), ale nie powiodło się. Te mimetype dane zajął pierwsze miejsce w pliku, ale tabela plik wydaje się alfabetycznie.
Ben Blank
2
@BenBlank Upewnij się, że nie sprawdzasz tego za pomocą klienta zip - będą ponownie zamawiać w sposób, który pasuje do ludzi, niekoniecznie to, co zobaczy czytelnik epub.
Paul
Prawdopodobnie problem polega na tym, że 7-Zip lubi utrzymywać swój katalog w kolejności alfa, a następnie (koniecznie) przepisuje go po zamknięciu pliku zip. Teoretycznie można to naprawić, edytując plik zip za pomocą edytora szesnastkowego lub jakiegoś narzędzia ad-hoc i przestawiając katalog - nie jest to szczególnie skomplikowane. Edycja zostałaby uproszczona poprzez dołączenie fikcyjnego pliku, który zawsze sortuje najpierw. Ale oczywiście technika w powyższym linku również powinna działać.
Daniel R Hicks
Kiedyś 7z l filename.zipwyświetlałem zawartość zamka błyskawicznego i nie wydają się być w żadnej kolejności (nazwa, ścieżka, data, rozmiar ...). Tak więc użycie tego wiersza poleceń może pomóc ustalić prawdziwą kolejność plików w zipie.
Scott McClenning
@Paul - Sprawdzam, otwierając .epubedytor tekstu i bezpośrednio sprawdzając tabelę plików, więc wygląda na to, że takie podejście po prostu nie działa. Zabiorę młot Pythona do problemu i zobaczę, czy to nie rozwiąże.
Ben Blank
2

Utworzenie EPUB wymaga dwuetapowego procesu, po pierwsze dodaj mimetype bez żadnej (!) Kompresji, po drugie dodaj pozostałe pliki / foldery. Korzystając z 7z, możesz wykonać następujące polecenia:

7z a -mx=0 dummy.zip mimetype

Aby móc użyć symbolu wieloznacznego *, przenieś typ pliku do innego folderu i rozpocznij drugi krok:

7z a -r dummy.zip *

Po tym zmień nazwę ZIP na EPUB i znikniesz!

Piotr
źródło
Właśnie próbowałem tego i nadal pojawia się ten błąd: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 - Przywróć Monikę
1

Z mojego doświadczenia wynika, że ​​najprostszą odpowiedzią (dla Windows, 7, 64-bit) jest użycie wbudowanej funkcji Zip w systemie Windows. Użyj „Wyślij do”, aby wysłać typ mimetyczny do nowego skompresowanego folderu, a następnie użyj 7Zip, aby dodać META-INF i OEBPS do nowego zip. To wydaje się zawsze działać, jeśli chodzi o sekwencjonowanie najpierw pliku mimetype. Nie udało mi się wykonać tej operacji wyłącznie z 7-suwakiem. (Dotyczy to ePUBS, ale powinno działać również w przypadku sekwencjonowania również w innych obszarach).

Mam nadzieję, że to pomaga komuś innemu.

Kimberly Hitchens
źródło
0

Użycie winrar załatwiło sprawę. Dodałem typ mimetyczny do archiwum zip (nieskompresowany!), A następnie dodałem pozostałe foldery, zwykła kompresja.

To rozwiązanie nie działało dla mnie z 7-zip, ponieważ ciągle zmienia kolejność plików.

kat
źródło
0

Miałem ten sam problem podczas pracy z plikami EPUB.

W systemie Windows 7 naprawiłem to za pomocą tej dziwnej sztuczki, w której upewniłem się, że posortowałem wszystkie pliki, które zamierzałem zrobić w pliku zip, w taki sposób, aby na wierzchu umieścić plik typu mimetype (zwykle sortowanie według rozmiaru). Następnie upewniłem się, że zaznaczyłem wszystkie pliki od góry do dołu kursorem przed wysłaniem ich do folderu skompresowanego (zip) (takiego jak: https://support.microsoft.com/en-us/help/14200/ windows-compress-uncompress-zip-files ). Potem mogłem zmienić nazwę i typ pliku na dowolny .epub.

Jednak po uaktualnieniu do systemu Windows 10 ta sztuczka już nie działała. Na szczęście znalazłem inny sposób. Najpierw wyślij żądany plik na górze (typ mimetyczny) w pliku zip do folderu skompresowanego (zip). Upewnij się, że jest to tylko ten plik. Następnie biorę inne pliki, które chcę skompresować (w moim przypadku dwa foldery), zaznaczam je kursorem i przeciągam do utworzonego właśnie pliku zip. Windows doda następnie nowe pliki do pliku zip i utrzyma plik, który pierwotnie spakowałeś na wierzchu.

MatsKS
źródło
1
Czy możesz wyraźnie wskazać, jaka jest odpowiedź na pytanie autora? Aktualizacja do systemu Windows 10 nie jest tak naprawdę odpowiedzią na to pytanie. Powinieneś skoncentrować się na tym, jak to naprawiłeś, podać szczegóły, twoje wypowiedzi są zbyt szerokie. Gdybym miał odtworzyć oryginalny problem, nie byłbym w stanie rozwiązać go z Twoją odpowiedzią.
Ramhound,