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.