Como posso controlar a ordem dos arquivos em um arquivo ZIP?

13

Há momentos em que é necessário que os arquivos em um arquivo ZIP estejam em uma ordem específica (por exemplo, atualmente estou criando EPUBs , que exigem que a primeira entrada no mimetypearquivo ZIP seja o arquivo). Como posso fazer isso no Windows?

Atualmente, estou usando o 7-Zip como meu arquivador, mas não vejo uma opção para controlar a ordem dos arquivos. Isso pode ser feito com 7-zip? Caso contrário, que opções tenho?

Ben Blank
fonte
3
Adicioná-los na ordem em que eles precisam estar deve fazer isso. Tente compactar o arquivo mimetype primeiro e depois adicionar os outros arquivos ao zip como uma segunda operação.
Paul
1
@ Paul - Surpreendentemente, isso não funcionou. : - /
Ben Blank
Talvez seja LIFO? Você pode tentar adicionar o último tipo MIME? Você está testando contra um leitor de epub certo, em vez de apenas descompactar?
Paul
3
Um aplicativo que requer que o conteúdo esteja em uma ordem específica está quebrado.
psusi
3
Sheesh, os autores das especificações precisam ser retirados e espancados com uma pista de quatro.
Psusi

Respostas:

3

Uma maneira seria: a maioria dos arquivadores e ferramentas de arquivamento tem a capacidade de anexar ou adicionar itens adicionais ao arquivo original. Crie seu arquivo com os itens que deseja na parte superior e adicione itens de arquivos adicionais ao arquivo criado. Eu sei que isso funciona nas próprias ferramentas ZIP do Windows.

parece que a resposta real está além de mim, aqui para C # /programming/5898787/creating-an-epub-file-with-a-zip-library

aqui para HTML (usando 7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

especificamente esta parte

2.Abra a pasta amostra-livro-de-fotos e copie o tipo de arquivo mimet para o arquivo morto (vazio) primeiro.
3.Agora, copie as outras pastas (META-INF e OEBPS) para o arquivo morto.


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

O conteúdo do arquivo mimetype não deve conter nenhum preenchimento ou espaço em branco à esquerda, não deve começar com a assinatura Unicode (ou Byte Order Mark) e o caso da cadeia de caracteres do tipo MIME deve ser exatamente como apresentado acima. Além disso, o arquivo de tipo MIME não deve ser compactado nem criptografado e não deve haver um campo extra em seu cabeçalho ZIP.

Psycogeek
fonte
1
Eu tentei isso no 7-zip (criando um arquivo apenas mimetype , depois adicionando os outros arquivos), mas não tive sucesso. Os mimetype dados foram os primeiros no arquivo, mas a tabela de arquivos parece estar em ordem alfabética.
Ben Blank
2
@BenBlank Verifique se você não está verificando isso usando um cliente zip - eles serão reordenados de maneira adequada aos seres humanos, não necessariamente ao que o leitor de epub verá.
Paul
Presumivelmente, o problema é que o 7-Zip gosta de manter seu diretório em ordem alfa e, em seguida, (necessariamente) o reescreve quando fecha o arquivo zip. Pode-se, em teoria, corrigir isso editando o arquivo zip com um editor hexadecimal ou algum tipo de ferramenta ad-hoc e reorganizando o diretório - não é particularmente complicado. A edição seria simplificada, incluindo um arquivo fictício que sempre classifica primeiro. Mas é claro que a técnica no link acima também deve funcionar.
Daniel R Hicks
Eu costumava 7z l filename.ziplistar o conteúdo de um zip, e eles não parecem estar em nenhuma ordem (nome, caminho, data, tamanho ...). Portanto, o uso dessa linha de comando pode ajudar a determinar a ordem verdadeira dos arquivos no zip.
Scott McClenning 03/02/12
@ Paul - Estou verificando abrindo o .epubem um editor de texto e examinando a tabela de arquivos diretamente, então parece que essa abordagem simplesmente não está funcionando para mim. Vou levar o martelo Python para o problema e ver se isso não o corrige.
Ben Blank
3

Versão GUI de 7 zip:

  1. extrair mimetypedo arquivo EPUB
  2. excluir mimetypeno arquivo EPUB
  3. renomeie mimetypepara!mimetype
  4. adicionar !mimetypeao arquivo EPUB
  5. renomear !mimetypepara mimetypedentro do arquivo EPUB

Versão simples de arrastar e soltar com 7 zip:

Vá para a página de download 7-zip e faça o download 7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(não funciona com o estável 9.20, mas funciona bem com o 9.38 beta e o 15.06 beta). Extrair 7za.exe. Salve o código abaixo como repair.batarquivo:

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

Coloque 7za.exee repair.batno mesmo diretório e simplesmente arraste seu arquivo EPUB repair.bat.

Dízimo-Firion
fonte
2

A criação de um EPUB requer um processo em duas etapas, primeiro adicione o tipo MIME sem nenhuma compressão (!), Depois adicione os outros arquivos / pastas. Portanto, usando o 7z, você pode executar os seguintes comandos:

7z a -mx=0 dummy.zip mimetype

Para poder usar o curinga *, você deve mover o tipo de arquivo para outra pasta e iniciar a segunda etapa:

7z a -r dummy.zip *

Depois disso, renomeie o ZIP para EPUB e você se foi!

Pedro
fonte
Acabei de tentar isso e ainda recebo este erro: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 - Restabelecer Monica
1

Na minha experiência, a resposta mais simples (para Windows, 7, 64 bits) é usar a funcionalidade Zip incorporada do Windows. Use o "Enviar para" para enviar o tipo de mimet para uma nova pasta compactada e, em seguida, use o 7Zip para adicionar o META-INF e o OEBPS ao novo zip. Isso parece funcionar sempre em termos de sequenciamento do arquivo mimetype primeiro. Não tive sucesso ao executar esta operação apenas com o 7-zip. (Isso é para o ePUBS, mas deve funcionar também para sequenciamento em outras áreas.)

Espero que isto ajude alguém.

Kimberly Hitchens
fonte
0

Usar o winrar fez o truque para mim. Adicionei o tipo MIME a um arquivo zip (descompactado!) E depois adicionei as pastas restantes, a compactação regular.

Esta solução não funcionou com o 7-zip para mim, pois continua reorganizando os arquivos.

kat
fonte
0

Eu tive esse mesmo problema ao trabalhar com arquivos EPUB.

No Windows 7, eu o consertei com esse truque estranho, onde certificava-se de classificar todos os arquivos que eu criaria em um zip, de maneira que fizesse digitar o arquivo na parte superior (classificando-os por tamanho geralmente). Depois, certifiquei-me de marcar todos os arquivos de cima para baixo com o cursor antes de enviá-los para uma pasta compactada (zip) (assim: https://support.microsoft.com/en-us/help/14200/ windows-comprimir-descompactar-arquivos-zip ). Depois disso, eu poderia mudar o nome e o tipo de arquivo para qualquer .epub.

No entanto, após a atualização para o Windows 10, esse truque não funcionou mais. Felizmente eu encontrei outro caminho. Primeiro, você envia o arquivo que deseja na parte superior (tipo mimético) do arquivo zip para uma pasta compactada (zip). Verifique se é apenas esse arquivo. Depois que eu pego os outros arquivos que quero zipar (duas pastas no meu caso), marque-os com o cursor e arraste-os para o arquivo zip que acabei de criar. O Windows adicionará os novos arquivos ao arquivo zip e manterá o arquivo que você originalmente zipou no topo.

MatsKS
fonte
1
Você pode indicar claramente qual é a resposta à pergunta do autor? A atualização para o Windows 10 não é realmente uma resposta para esta pergunta. Você deve se concentrar em como o corrigiu, fornecer detalhes, suas declarações são muito amplas. Se eu reproduzisse o problema original, não conseguiria resolvê-lo com sua resposta.
Ramhound 19/10/19