Eu tenho arquivos para um mod para um jogo. Este mod requer que alguns arquivos de música estejam presentes duas vezes em pastas diferentes. Dado que a música é a mesma nas duas pastas, existe uma maneira de compactar os arquivos uma vez e alterar o índice e a referência para a outra cópia, de modo que, se eu extrair o arquivo zip, ele extraia os arquivos duas vezes, mas eles são realmente apenas uma vez no zip?
Semelhante à criação de um ISO com um TOC modificado (embora eu também não saiba como fazer isso)
Um exemplo do que o zip teria:
mod.zip
\music\set_a\tune1.mp3
\music\set_a\tune2.mp3
\music\set_a\tune3.mp3
\music\set_a\tune4.mp3
\music\set_a\tune5.mp3
\music\set_a\tune6.mp3
\music\set_b\tune1.mp3
\music\set_b\tune2.mp3
\music\set_b\tune3.mp3
\music\set_b\tune4.mp3
\music\set_b\tune5.mp3
\music\set_b\tune6.mp3
\graphics\set_a\img1.png
\graphics\set_a\img2.png
\graphics\set_b\img1.png
\graphics\set_b\img2.png
Imagine que as melodias de set_a
e set_b
são idênticas, os gráficos de set_a
e set_b
não são.
Em um mundo ideal, eu substituiria todos os arquivos mp3 por arquivos de set_b
comprimento 0 e, depois de criar o arquivo zip, alteraria o índice e faria com que ele se referisse aos set_a
dados, para que, ao extrair, criasse music\set_b\tune1.mp3
, mas usasse os dados de music\set_a
.
Isso é possível? Se não, alguma outra maneira fácil de criar algo semelhante?
Provavelmente, uma alternativa simples é usar um formato de arquivo "sólido". É sempre assim que os arquivos .tar.foo funcionam e é uma opção selecionável para os formatos .rar e .7z.
Nesse modo, o conteúdo do arquivo é concatenado e compactado como um único fluxo contínuo, o que significa que as repetições também serão detectadas nos arquivos – e arquivos idênticos devem ser desduplicados como parte da compactação regular.
(As desvantagens desse modo são que ele torna a extração de arquivos individuais lenta e o arquivo não pode ser atualizado facilmente.)
Nota: Este outro tópico (que foi fechado) tem respostas dizendo que isso só funciona com quantidades relativamente pequenas de dados em comparação com o parâmetro de tamanho do dicionário. Mas pelo menos é menos arriscado do que fazer alterações fora do padrão na já horrível estrutura .zip.
O zpaq faz isso para você, possui desduplicação integrada, é de código aberto e roda pelo menos no Windows e no Linux (provavelmente já empacotado).
Esta é uma verificação rápida no Linux:
Veja o tamanho do arquivo. Observe também que não fornecemos nenhuma informação sobre a duplicação dos arquivos, nem links físicos/soft.