Compactação de script (ZIP ou TAR) a ser feita em pedaços


3

Estou tentando encontrar um utilitário ou uma abordagem que permita compactar um diretório inteiro em pedaços. Sei que é fácil especificar, por exemplo, que os arquivos de arquivamento criados devem ter exatamente o tamanho X ou menor, mas os utilitários de arquivamento geralmente o tornam necessário para que você precise de todos os arquivos para abrir o arquivamento, e é isso que estou tentando evitar. Preciso especificar um tamanho máximo de um arquivo morto e ele adiciona arquivos até que o espaço no próximo arquivo fique sem espaço para que ele inicie um novo arquivo morto. Dessa forma, os arquivos compactados são tecnicamente independentes um do outro.

Sinto muito, é difícil para mim colocar isso em palavras com precisão. Comente se não estou sendo específico o suficiente.


3
O TAR não é compactação, é um utilitário de arquivamento (agrupa vários arquivos em um arquivo). GZip é compactação, mas não arquivamento. (TAR + GZip = .tgz ou Tar.gz) postal, RAR, 7zip tudo fazer tanto compressão e arquivamento.
quack quixote

Respostas:


2

Este é um conceito que me interessa há um tempo, embora eu ainda não tenha escrito para escrever um roteiro, pois estou um pouco ocupado!

Não existe uma maneira fácil para o software realmente saber para que algo será compactado, sem executar primeiro os arquivos através do algoritmo (lembre-se, o tar é apenas um arquivador, não um utilitário de compactação, mas você pode usá-lo com o gzip). A outra opção (mais fácil) seria continuar adicionando arquivos ao arquivo e verificar o tamanho de cada vez. Não conheço nenhuma solução pré-fabricada para conseguir isso, mas ela pode ser implementada em algumas linhas de código!

A lógica básica seria algo como isto:

texto alternativo

Isso depende de qual utilitário você usa também. Algumas não possuem opções que permitem remover facilmente um arquivo do arquivo morto; portanto, pode ser necessário adicionar uma segunda variável de entrada para a margem de manobra. Essa segunda variável pode determinar o tamanho máximo estimado de um arquivo no diretório e, se o archive estiver a mais do que esse tamanho do tamanho preferido, ele será adicionado ao arquivo. Se não houvesse espaço suficiente, o arquivo seria fechado e criaria um novo. Obviamente, você pode ajustar esse algoritmo no infinito, garantindo que o tamanho do próximo arquivo seja verificado e comparado com o tamanho atual do arquivo. Você provavelmente também desejaria usar os arquivos maiores primeiro, para que você possa ver muita lógica entrar nisso.

Infelizmente, essa não é uma solução completa, mas espero que este seja um bom ponto de partida!


1

A única maneira de ver isso é adivinhar o tamanho dos arquivos compactados. Se os arquivos forem de tipos semelhantes (texto, imagens, etc.), provavelmente você poderá adivinhar bastante bem quão grande será o arquivo compactado final depois de combinar o número x deles.

Eu acho que nada faz o que você está pedindo fora da caixa, pois exigiria compressão-> verificar tamanho-> comprimir novamente o tipo de comportamento.


0

Suponho que você esteja fazendo backup de um grande diretório em uma pilha de CDs e que deseja extrair um arquivo de um CD inserindo 1 CD (em vez de precisar colocar 2 ou mais CDs no multi Arquivo -CD).

Talvez a maneira mais simples de atender a seus requisitos seja compactar individualmente cada arquivo em seu próprio pequeno arquivo ".zip" e depois copiar esses arquivos compactados nos CDs. (Existe uma maneira de armazenar o subdiretório subdiretório de onde o arquivo original veio no arquivo ".zip"; portanto, quando você restaura esse arquivo, ele é colocado novamente no local apropriado, mesmo com todas as ". zip "no disco estão em uma longa lista em um único diretório).

Depois de ter uma lista de arquivos zip, você pode começar a copiar a partir do topo da lista e, quando o CD estiver cheio, ejete e continue a copiar a partir desse ponto da lista com o próximo CD. Isso deixa um pouco de "espaço desperdiçado" no final de cada CD. Algumas pessoas, se chegarem a um pequeno arquivo mais abaixo na lista que se encaixa nesse espaço, voltarão e colocarão esse pequeno arquivo nesse espaço desperdiçado. Algumas pessoas tentam obsessivamente reorganizar qual arquivo entra em qual disco para compactá-los o máximo possível .

Essa abordagem - compactando independentemente cada arquivo - sacrifica algum espaço em disco para ganhar um pouco de conveniência.



0

Tanto quanto eu sei, o afio suporta arquivamento de vários volumes e permite restaurar dados de arquivos arbitrários. Mas os arquivos podem abranger dois volumes, então você pode ter que fazer algo como

cat archive-3.afio archive-4.afio | afio -i -k -
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.