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.
bash
integrierte Funktion namens Klammererweiterung verwendet . Dies ist möglicherweise nicht in allen Shells verfügbar. Sollten Sie auf eine Fehlermeldung oder ein unerwartetes Verhalten stoßen, verwenden Sieprintf 'n file-%02d.tar\n' $(seq 2 100) | (etc.)
stattdessen, was überall funktionieren sollte.Im Zweifelsfall lesen Sie das Handbuch ...
http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html
oder verwenden Sie einfach die folgende Suchzeichenfolge in Ihrer bevorzugten Internet-Suchmaschine:
"Archiv länger als ein Band oder eine Festplatte"
Dieser Abschnitt des GNU- Tar- Handbuchs enthält ein geeignetes Skript ( New-Volume genannt ), das mit der Option -F des Befehls tar verwendet werden kann. Wenn Sie möchten, können Sie das Skript nach Ihrem Geschmack anpassen.
genießen!
quelle
--new-volume-script
Flagge zu erwähnen ?