7-Zip muitos arquivos de diferentes pastas?

4

Gostaria de adicionar um grande número de arquivos com nomes diferentes de pastas diferentes a um único arquivo 7-Zip usando 7za.exe . Isso deveria ser simples, mas acabou sendo uma grande dor.

Eu criei um arquivo que contém os caminhos ( 7za a out.7z @list.txt ), mas quando há muitos (~ 100) arquivos, ele falha. Aparentemente, o conteúdo do arquivo de argumentos é colocado no buffer da linha de comando [ Editar : Isso provavelmente foi uma desinformação da minha parte, de qualquer forma não foi a razão ], que é muito pequeno (o número de arquivos para adicionar é mais de um milhão).

Não é possível dividir o processo adicionando os arquivos um por um devido à maneira como 7za funciona: Ao adicionar o próximo arquivo, ele cria uma cópia do arquivo, adiciona o arquivo à cópia e, finalmente, substitui o arquivo. original. Isso é terrivelmente lento quando o arquivo chega ao tamanho de 100 MB.

Até agora eu estou usando uma combinação das duas abordagens, adicionando uma dúzia de arquivos de cada vez em um loop, mas é um hack não confiável e ainda muito lento. Existe uma maneira melhor de fazer isso?

Eu tentei usar DLLs wrapper 7-Zip (sou um programador C #), mas nenhum deles funcionou de forma confiável e fui repetidamente sugerido usar apenas 7za .

    
por mafu 04.09.2012 / 16:48

1 resposta

4

Devido à maneira estúpida com que abordo o problema, levei muito tempo para descobrir o verdadeiro motivo. É devido a um bug em 7zip em um lugar que eu fiz não pense em.

There is a wrong error notification if using a listfile in cli version 4.57. If a listfile contains some lines of absolute paths (it seems that relative pathes are working) which point to a same named files in different directories a 'Duplicate filename' error comes up.

Consegui reproduzir o problema usando dois arquivos com o mesmo nome em diretórios diferentes, com seu caminho absoluto no listfile.

Na pergunta original, ao adicionar apenas 1 ou poucos arquivos por vez, funcionou (o arquivo em si foi criado sem problemas) já que o listfile (acidentalmente) não continha nenhum "nome de arquivo duplicado".

Oficialmente, isso é chamado de recurso. Enquanto eu não tenho certeza sobre isso, foi sem dúvida alguma confundir a mim e a outros devido ao fato de ele não estar documentado.

    
por 07.09.2012 / 12:17