Tomando Backup de arquivos de limite particular em unix

1

Aqui está o cenário, eu tenho 1000 arquivos em uma pasta de cada ~ 3 MB. Eu quero zipar todos os arquivos em 50MB de cada zip e remover os arquivos originais.

OBSERVAÇÃO: 50 MB podem conter 20 arquivos ou 10 arquivos, mas esse pacote zip deve ser < = 50MB.

Eu quero transferir esses arquivos sem perda de dados. O arquivo deve ser de formato (tar / gzip / bzip). Por favor, forneça sugestões para mim se tivermos outra maneira de superar a perda de dados.

Precisa criar um script de shell.

    
por slm 08.08.2013 / 16:22

3 respostas

1

Uma solução é usar o comando split.

O comando split dividirá um arquivo em vários arquivos, fazendo todo o trabalho pesado para você.

Aqui está um exemplo:

tar -cvf - file1 file2 file3 | split --bytes=50m --suffix-length=4 --numeric-suffix - myarchive.tar.

E para descompactar:

cat myarchive.tar.* | tar xvf -
    
por 08.08.2013 / 16:51
1

O pacote zip suporta a compactação bzip2 e --split .

O bzip2 atende às suas necessidades?

-s splitsize --split-size splitsize Enable creating a split archive and set the split size. A split archive is an archive that could be split over many files. As the archive is created, if the size of the archive reaches the specified split size, that split is closed and the next split opened.

...

Split size is a number optionally followed by a multiplier. Currently the number must be an integer. The multiplier can currently be one of k (kilobytes), m (megabytes), g (gigabytes), or t (terabytes). As 64k is the minimum split size, numbers without multipliers default to megabytes. For example, to create a split archive called foo with the contents of the bar directory with splits of 670 MB that might be useful for burning on CDs, the command:

zip -s 670m -r foo bar

could be used.

Para garantir a integridade dos dados, rsync com verificação de soma de verificação. É muito mais lento, mas calculará a soma de verificação nos dois lados da transferência.

-c, --checksum

This changes the way rsync checks if the files have been changed and are in need of a transfer. Without this option, rsync uses a lqquick checkrq that (by default) checks if each file's size and time of last modification match between the sender and receiver. This option changes this to compare a 128-bit checksum for each file that has a matching size. Generating the checksums means that both sides will expend a lot of disk I/O reading all the data in the files in the transfer (and this is prior to any reading that will be done to transfer changed files), so this can slow things down significantly.

De: man zip , man rsync

    
por 08.08.2013 / 17:46
0

não testado

cd /the/directory
files=(*)
i=0
z=0
create_zip=true
for ((i=0; i<${#files[@]}; i++)); do
    if $create_zip; then
        ((z++))
        zip_file=prefix.$z.zip
        create_zip=false
    fi
    # add the file
    zip $zip_file "${files[i]}"
    # check the size
    if (( $(stat -c %s $zip_file) >= 50000000 )); then
        # remove the previous file
        zip -d $zip_file "${files[i]}"
        create_zip=true
        # decrement the file index so this file gets added to the next zip
        ((i--))
    else
        echo rm "${files[i]}"            ### remove "echo" if it's OK
    fi
done
    
por 08.08.2013 / 16:57