Hier ist eine Lösung:
printf 'n file-%02d.tar\n' {2..100} |
tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null
Dabei ist 100 eine Zahl, die größer oder gleich der Anzahl der Volumes ist.
Bearbeiten
Das Setzen einer großen Zahl sollte kein Problem sein, obwohl ich dazu neige, keine lächerliche zu nehmen.
Eine Alternative könnte ein "Next Volume" -Skript sein , das Sie mit der -F
Option festlegen können :
tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null
dann in ./myscript
setzen
#!/bin/bash
prefix="$1"
n=1
while [[ -e "$prefix-$n.tar" ]]; do
((n++))
done
mv "$prefix.tar" "$prefix-$n.tar"
echo "$prefix-$n.tar"
Es wird an jedem Volume-Ende ausgeführt und file.tar
an die entsprechende Stelle verschoben fileNNN.tar
. Für das letzte Volume wird das Skript nicht ausgeführt, sodass der Name des letzten Volumes erhalten bleibt file.tar
.
Bearbeiten 2
Am Ende hatte ich die folgende ausgearbeitete Lösung.
Hier sind zwei Skripte, eines für die Erstellung und das andere für die Extraktion:
#!/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
und
#!/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
wo ./tar-multi-volume-script
ist gegeben durch
#!/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
Natürlich müssen Sie hier und da viele Dinge ändern, um sich an Ihre Situation anzupassen und um sicherzugehen, dass es funktioniert cron
, das ist immer eine kleine Herausforderung.