Posso automatizar o recurso de vários volumes do tar?

7
Ok, então eu acabei de ler um artigo / "> esta página depois de uma maneira de melhorar a minha solução de backup atual no meu servidor Debian. Tar parece estar oferecendo um recurso multi-volume bastante bom, embora quando eu o experimento, ele me pede para Prepare volume #X for ‘mybackup.tar.gz’ and hit return: .

Como devo automatizar isso, pois gostaria de usar esse recurso em um script CRON automatizado, onde ninguém está lá para enviar o retorno e digitar o que for solicitado pelo prompt de vários volumes.

Está usando split da única maneira?

    
por Industrial 24.09.2011 / 23:28

2 respostas

13

Aqui está uma solução:

printf 'n file-%02d.tar\n' {2..100} | 
    tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null

em que 100 é um número maior ou igual ao número de volumes.

Editar

Definir um grande número não deve ser um problema, apesar de eu não aceitar um ridículo.

Uma alternativa pode ser um script "próximo volume" , que você pode definir com a opção -F ,

tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null

e, em seguida, em ./myscript put

#!/bin/bash

prefix="$1"
n=1
while [[ -e "$prefix-$n.tar" ]]; do
  ((n++))
done
mv "$prefix.tar" "$prefix-$n.tar"
echo "$prefix-$n.tar"

Ele será executado em cada final de volume e moverá file.tar para o fileNNN.tar apropriado. Para o último volume, o script não será executado, portanto, o último nome do volume permanecerá file.tar .

Editar 2

Acabei com a seguinte solução elaborada.
Aqui estão dois scripts, um para a criação e outro para a extração:

#!/bin/bash
# CREATION SCRIPT

# save on file the initial volume number
echo 1 >number

# multi-volume archive creation
tar -ML 100000 -F './tar-multi-volume-script c file' -cf file.tar Documents2/ 2>&-

# execute the "change-volume" script a last time
./tar-multi-volume-script c file

e

#!/bin/bash
# EXTRACTION SCRIPT

# save on file the initial volume number
echo 1 >number

# execute the "change-volume" script a first time
./tar-multi-volume-script x file

# multi-volume archive extraction
tar -M -F './tar-multi-volume-script x file' -xf file.tar 2>&-

# remove a spurious file
rm file.tar

onde ./tar-multi-volume-script é dado por

#!/bin/bash
# TAR INVOKED SCRIPT

mode="$1"
prefix="$2"
n=$(<number)

case $mode in
  c) mv "$prefix.tar"    "$prefix-$n.tar" ;;
  x) cp "$prefix-$n.tar" "$prefix.tar"    ;;
esac

echo $((n+1)) >number

Obviamente você tem que mudar muitos bits aqui e ali para se adaptar à sua situação e para ter certeza que funcionaria em cron , isso é sempre um pequeno desafio.

    
por 24.09.2011 / 23:54
0

Em caso de dúvida, leia o manual ...

link

ou simplesmente use a seguinte string de pesquisa em seu mecanismo de pesquisa da Internet favorito:

"Arquivos com mais de uma fita ou disco"

Essa seção do manual GNU tar fornece um script adequado (chamado new-volume ) para usar com a opção -F do comando tar. Você poderia ajustar esse script ao seu gosto, se desejar.

divirta-se!

    
por 19.10.2012 / 04:00