O que há de errado com este comando 'zip' para criar um arquivo multi-segmento?

2

Analisando esta pergunta, fiquei curioso para saber se um comando zip poderia ser usado em um contexto de gerenciador de arquivos menu para criar vários arquivos zip de 20MB (o nível aceito por uma mensagem do Gmail). As respostas para essa pergunta mostram que rar e 7z de vários arquivos podem ser facilmente criados, mas imaginei se zip arquivos podem ser tão acessíveis.

Um comando como o apresentado aqui deve funcionar. Tanto em um terminal quanto em ações personalizadas do Thunar, vi o mesmo resultado com este comando:

zip my_archive.zip -r /path/to -s 20m

a versão para Thunar é

zip my_archive.zip -r %f -s 20m

Mas o arquivo resultante ( meu_arquivo.z01, meu_arquivo.z02, meu_arquivo.z03 ..., meu_arquivo.zip ) não pode ser aberto.

Talvez isso seja esperado, já que aqui que os arquivos resultantes precisam ser "não-particionados" antes de serem "descompactados" ", com o comando

 zip -s 0 my_archive.zip --out unsplit.zip

(Eu tenho que dizer que não esperava a necessidade disso, como geralmente outros arquivos multi-arquivos não precisam ser unidos novamente antes de serem extraídos, e até mesmo um arquivo dividido com hjsplit fornece vários arquivos volumes que podem ser extraídos diretamente. Mas isso é outro assunto.)

Apenas que o arquivo unsplit.zip também apresenta um erro na extração.

$ unzip unsplit.zip
Archive:  unsplit.zip
  inflating: home/cip/Desktop/R/Interviu/20170918.3gpp  
  error:  invalid compressed data to inflate

O arquivo não pode ser extraído, mas pode ser aberto (explorado dentro de um gerenciador de arquivos) e possui uma estrutura ímpar dentro da pasta (refletindo o caminho onde foi criado inicialmente; como na linha inflating acima ).

O que está errado?

    
por cipricus 19.09.2017 / 12:30

1 resposta

2

Este é um problema conhecido em zip : it falha ao recombinar arquivos divididos em múltiplos do tamanho do buffer interno (16KiB). Por agora você precisa dividir em um tamanho diferente ... No seu caso, 20971519 (20MiB menos um byte) deve funcionar bem.

(Eu tentei recombinar manualmente um arquivo dividido, mas zip -FF procura os componentes do arquivo e não conserta o arquivo combinado.)

Acontece que File Roller suporta arquivos divididos (sem seguir o formato de arquivo segmentado), então se todos os seus destinatários usarem isso ( ou presumivelmente, outros arquivadores usando libarchive ), você pode dividir seu arquivo usando split ou uma ferramenta semelhante. Para que isso funcione, você precisa gerar arquivos usando os sufixos padrão de split , aa , ab etc:

split -b20m archive.zip split.z

Em seguida, o File Roller permitirá abrir split.zaa e extrair todo o arquivo de forma transparente (desde que todas as peças estejam presentes, obviamente).

    
por 19.09.2017 / 13:10

Tags