[gelöst]Benötige bitte Hilfe bei meinem Backupscript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Cassadi
Beiträge: 135
Registriert: 19.03.2005 12:58:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

[gelöst]Benötige bitte Hilfe bei meinem Backupscript

Beitrag von Cassadi » 10.01.2008 16:00:52

Hallo edle Coder,

ich habe ein Backupscript zusammengebastelt, aber leider bekomme ich eine Sache nicht hin. Ich möchte das /home sichern aber einige Ordner ausschließen.

Dazu habe ich die Variable EXCLUDE definiert, welche dann mittels

--exclude=${EXCLUDE} in der Befehlszeile abgearbeitet werden sollte. Tja leider funktioniert dies nicht, sondern alle Verzeichnisse, welche normalerweise ausgeschlossen sein sollten werden doch gesichert.

In meiner Not habe ich die Verzeichnisse momentan in eine Datei exclude.lst geschrieben und rufe das mittels -X exclude.lst auf. Das funktioniert, ich hätte aber lieber alles im Script stehen und nicht eine Extra-Auschluss-Datei wie im Moment.
Hier mal mein Script. Die beiden "Fehler" sind ausgerautet.

Code: Alles auswählen

#!/bin/bash
# Script für inkrementelles Backup 

### Einstellungen ##
BACKUPDIR=/home/backup/sicherung	# Pfad zum Backupverzeichniss
TIMESTAMP=timestamp.dat			# Zeitstempel
DATA=/home/cassadi			# Verzeichniss(e) welche(s) gesichert werden soll(en)

### Verzeichnisse/Dateien welche nicht gesichert werden sollen ##

# EXCLUDE="/home/cassadi/Bilder /home/cassadi/Desktop /home/cassadi/Digibib4 /home/cassadi/Download /home/cassadi/Filme /home/cassadi/Musik /home/cassadi/Spiele /home/cassadi/.VirtualBox /home/cassadi/.wine"

### Püfen ob das Backupverzeichniss vorhanden ist ##
if [ ! -d "${BACKUPDIR}" ]; then
	echo "Das Backupverzeichniss ${BACKUPDIR} existiert nicht!"
	exit 1
fi

### Backup erstellen ##
filename=backup-$(date +%F-%H:%M).tgz
echo "Sichere veränderte Daten in ${filename}"

tar -czf ${BACKUPDIR}/${filename} -g ${BACKUPDIR}/${TIMESTAMP} ${DATA} -X exclude.lst

### Wenn es mit der obigen EXCLUDE - Variable funktionieren würde, sollte der Befehl so aussehen ##

# tar -czf ${BACKUPDIR}/${filename} -g ${BACKUPDIR}/${TIMESTAMP} ${DATA} --exclude=${EXCLUDE}

echo "Sicherung erfolgreich abgeschlossen!"
Wäre sehr froh wenn vieleicht jemand von Euch da eine Lösung weis.

Lieben Gruß
Cassadi
Zuletzt geändert von Cassadi am 11.01.2008 09:29:19, insgesamt 1-mal geändert.
Ich würde gerne die Welt verbessern, doch Gott gibt mir den Quellcode nicht.
Märchenbasar - Tritt ein und lasse dich verzaubern!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 10.01.2008 16:07:01

ich vermute, dass du mit --exclude jeweils nur eine Datei/Ordner angeben kannst. Du musst also vor jedem Ordner ein --exclude angeben.

... das ist aber nur geraten (ich habe gerade leider kein Unix zum testen zur Hand)


btw: du solltest vielleicht auch den Rückgabewert ($?) des tar-Aufrufs abfragen, bevor du "erfolgreich" ausgibst ;-)
Use ed once in a while!

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Beitrag von mistersixt » 10.01.2008 16:19:11

Meillo hat geschrieben:ich vermute, dass du mit --exclude jeweils nur eine Datei/Ordner angeben kannst. Du musst also vor jedem Ordner ein --exclude angeben.

.
Ja, so kenne ich das auch. Oder mit -X bzw. --exclude-from=FILE die zu exkludierenden Sachen in einer Datei auslagern.

Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 10.01.2008 16:23:16

könnte mir vielleicht noch vorstellen, dass folgendes möglich ist:

Code: Alles auswählen

echo $EXCLUDE | tar -czf ${BACKUPDIR}/${filename} -g ${BACKUPDIR}/${TIMESTAMP} ${DATA} -X -
(kann sein, dass dann die Liste in $EXCLUDE mit Newlines getrennt sein muss)

aber das ist wiederum nur geraten.
Use ed once in a while!

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 10.01.2008 16:37:48

Hi,

setz in mal "set -x" in dein Script ein, am Anfang. Damit schaltest du quasi das Bash eigene Debugging ein:
-x After expanding each simple command, for command, case command, select command, or arithmetic
for command, display the expanded value of PS4, followed by the command and its expanded arguâ
ments or associated word list.
Kommt da eine Fehlermeldung, bzw. zu was wird der Ausdruck denn expandiert?
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Cassadi
Beiträge: 135
Registriert: 19.03.2005 12:58:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von Cassadi » 10.01.2008 16:51:15

Herzlichen Dak an alle Helfer. Der Tipp mit dem --exclude vor jedes Verzeichniss war richtig. Ist irgendwie etwas umständlich aber es funktioniert erstmal perfekt.

Code: Alles auswählen

#!/bin/bash
# Script für inkrementelles Backup 

### Einstellungen ##
BACKUPDIR=/media/backup/sicherung	# Pfad zum Backupverzeichniss
TIMESTAMP=timestamp.dat			# Zeitstempel
DATA=/home/user			# Verzeichniss(e) welche(s) gesichert werden soll(en)

### Verzeichnisse/Dateien welche nicht gesichert werden sollen ##
EXCLUDE="--exclude=/home/user/Bilder --exclude=/home/user/Desktop  --exclude=/home/user/Download --exclude=/home/user/Filme --exclude=/home/user/Musik --exclude=/home/user/Spiele --exclude=/home/user/.VirtualBox --exclude=/home/user/.wine"

### Püfen ob das Backupverzeichniss vorhanden ist ##
if [ ! -d "${BACKUPDIR}" ]; then
	echo "Das Backupverzeichniss ${BACKUPDIR} existiert nicht!"
	exit 1
fi

### Backup erstellen ##
filename=backup-$(date +%F-%H:%M).tgz
echo "Sichere Daten oder veränderte Daten in ${filename}"

tar -cvzf ${BACKUPDIR}/${filename} -g ${BACKUPDIR}/${TIMESTAMP} ${DATA} ${EXCLUDE}

if [ $? -ne 0 ]; then
	clear
	echo "Es gab einen Fehler bei der Sicherung"
else
	clear	
	echo "Sicherung ${filename} erfolgreich abgeschlossen!"
fi
Hier nochmal das funktionierende Script. Hab auch die "Erfolgs-Abfrage" eingebaut. Danke für den Tip. Wenn jemand noch ne bessere Lösung zum umgehen der ganzen --exclude hat, dann immer her damit. Ansonsten wer das Script brauchen kann möge sich bedienen. Sollte ja eigentlich alles dokumentiert sein um damit zurecht zu kommen.

Lieben Gruß
Cassadi
Zuletzt geändert von Cassadi am 12.01.2008 11:20:00, insgesamt 1-mal geändert.
Ich würde gerne die Welt verbessern, doch Gott gibt mir den Quellcode nicht.
Märchenbasar - Tritt ein und lasse dich verzaubern!

Benutzeravatar
Cassadi
Beiträge: 135
Registriert: 19.03.2005 12:58:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von Cassadi » 10.01.2008 18:20:18

Da fällt mir ein ...

könnte man die Ausgabe auch so gestalten, das ein Fortschrittbalken angezeigt wird?

Also z.B.

user@rechner:~$ ./backup.sh
Sichere Daten oder veränderte Daten in backup-001.tgz
|==========> 43%

Wäre dann etwas spannender :lol:

Finde leider nichts dazu im man tar. Höchstens mit -v eben alles durchrauschen lassen, was ja aber nicht wirklich sinnvoll wäre.

Lieben Gruß
Cassadi
Ich würde gerne die Welt verbessern, doch Gott gibt mir den Quellcode nicht.
Märchenbasar - Tritt ein und lasse dich verzaubern!

Antworten