Como dividir um arquivo tar em partes menores nos limites do arquivo?

7

Eu tenho um arquivo tar que quero dividir em vários arquivos tar menores. Isso seria fácil com split , mas eu quero que os arquivos divididos sejam arquivos tar totalmente utilizáveis, o que split não pode fazer, pois ele será dividido em pontos arbitrários, não em limites de arquivo.

Então, como dividir um arquivo tar em partes menores nos limites do arquivo, para que nenhum arquivo fique metade em um tar e metade no outro tar?

Soluções que não usam alcatrão e realizam a tarefa por outros meios também seriam bem-vindas.

PS: Sim, haverá casos em que isso não é possível (tar com arquivos maiores que o tamanho da divisão).

    
por Grumbel 17.09.2010 / 11:40

3 respostas

3

Se recriar o arquivo for uma opção, este script Bash deve fazer o truque (é apenas uma maneira possível):

#!/bin/bash

if [ $# != 3 ] ; then
    echo -e "$0 in out max\n"
    echo -e "\tin:  input directory"
    echo -e "\tout: output directory"
    echo -e "\tmax: split size threshold in bytes"
    exit
fi

IN=$1 OUT=$2 MAX=$3 SEQ=0 TOT=0
find $IN -type f |
while read i ; do du -bs "$i" ; done |
sort -n |
while read SIZE NAME ; do
    if [ $TOT != 0 ] && [ $((TOT+SIZE)) -gt $MAX ] ; then
        SEQ=$((SEQ+1)) TOT=0
    fi
    TOT=$((TOT+SIZE))
    TAR=$OUT/$(printf '%08d' $SEQ).tar
    tar rf $TAR "$NAME"
done

Classifica (ordem crescente) todos os arquivos por tamanho e começa a criar os arquivos; muda para outro quando o tamanho excede o limite.

NOTA: Verifique se o diretório de saída está vazio.

USE POR SUA PRÓPRIA CONTA E RISCO

    
por 17.09.2010 / 15:33
1

Eu não acredito que existam ferramentas existentes para fazer isso, mas seria razoavelmente fácil implementar você mesmo. O formato tar é bem simples, então você só precisa ter um split que o leve em consideração. A teoria básica é ler um cabeçalho, examinar o tamanho declarado do arquivo recebido e determinar se deve dividir agora ou gravar o arquivo atual. Leia o próximo cabeçalho e repita.

    
por 17.09.2010 / 12:25
1

Existe uma ferramenta, tarsplitter , que divide com segurança os arquivos tar. Você especifica o número de partes em que deseja dividir o arquivo, e descobrirá onde estão os limites do arquivo.

link

Os arquivos menores de saída não serão exatamente do mesmo tamanho, mas muito próximos - presumindo que os arquivos no arquivo original não tenham muita variação.

Exemplo - divida o arquivo "files.tar" em 4 arquivos menores:

tarsplitter -p 4 -i files.tar -o /tmp/parts

Criando:

/tmp/parts0.tar
/tmp/parts1.tar
/tmp/parts2.tar
/tmp/parts3.tar
    
por 21.10.2018 / 20:37

Tags