Kann ich die Multi-Volume-Funktion von tar automatisieren?

8

Ok, ich habe diese Seite gerade durchgelesen, um meine aktuelle Backup-Lösung auf meinem Debian-Server zu verbessern. Tar scheint eine ziemlich nette Funktion mit mehreren Bänden anzubieten, obwohl ich beim Ausprobieren dazu aufgefordert werde Prepare volume #X for ‘mybackup.tar.gz’ and hit return:.

Wie soll ich dies automatisieren, da ich diese Funktion in einem automatisierten CRON-Skript verwenden möchte, in dem niemand da ist, um die Eingabetaste zu drücken und alles einzugeben, was von der Eingabeaufforderung für mehrere Volumes benötigt wird?

Ist splitder einzige Weg?

Industriell
quelle

Antworten:

14

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 -FOption festlegen können :

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

dann in ./myscriptsetzen

#!/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.taran 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-scriptist 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.

Enzotib
quelle
Ich mag das, aber dann muss ich vorher die maximale Anzahl von Volumes pro Verzeichnis kennen? Ich meine, was passiert, wenn ich in 100 Verzeichnissen 716 m überschreite? Kann ich max einfach auf eine lächerlich hohe Zahl wie 919191 setzen und es belassen?
Industrie
@Industrial: siehe edit
enzotib
Vielen Dank für diese großartige Antwort, Enzotib! Wie würden Sie vorschlagen, mit diesem "Next-Volume" -Skript wiederherzustellen / zu extrahieren?
Industrie
@Industrial: hier eine fast vollständige Lösung
Enzotib
Tolle Ansätze! Vielen Dank an alle Beteiligten. - Vorsichtsmaßnahme: Ich kann sehen, dass die erste Lösung eine bashintegrierte 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 Sie printf 'n file-%02d.tar\n' $(seq 2 100) | (etc.)stattdessen, was überall funktionieren sollte.
Syntaxfehler
0

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!

Najevi
quelle
Sie scheinen vergessen zu haben, die --new-volume-scriptFlagge zu erwähnen ?
SamB
7
Bitte poste nicht nur Links; Fügen Sie einen Kontext hinzu, damit im Falle eines Ausfalls der anderen Website hier genügend Informationen vorhanden sind, um Ihre Antwort zu verstehen.
Jasonwryan