Hilfestellung beim Erstellen von Shell Backup-Script gesucht

SimonK91

Lieutenant
Registriert
März 2012
Beiträge
900
Hallo Forum,

ich möchte ein Script basteln, welches beim Ausführen Dateien auf einem Server in ein vorhandenes Verzeichnis kopiert und vor dem Kopieren ein Backup der zu überschreibenen Daten erstellt.

Beispiel:

Beim Ausführen des Scriptes werden die Daten:

/Programm/Programmdateien/Datei01
/Programm/Programmdateien/Datei02
/Programm/Programmdateien/Datei03

in das Verzeichnis:

/Unterordner/Kundenname/Programm/Programmdateien/Datei01
/Unterordner/Kundenname/Programm/Programmdateien/Datei02
/Unterordner/Kundenname/Programm/Programmdateien/Datei03

kopiert und somit überschrieben. Zuvor soll jedoch ein Backup der zu überschreibenen Dateien erfolgen.

Soweit bekomme ich das ganze denke ich hin. Mein Problem ist aber, dass sich "Kundenname" immer ändert. Ist es möglich dass ich eine Abfrage in das Script einbaue welche den Ordnernamen "Kundenname" abfragt und ab da das Script weiter ausgeführt wird?

Ich hoffe das war halbwegs verständlich. Bin für jeglichen Input dankbar!
 
also bei einem normalen bashscript, könntest du das script einfach mit einem parameter aufrufen.
z.b. ./my_backup PeterMueller

im Code müsstest du dann Kundenname einfach durch $1 ersetzen und hast gewonnen.

oder soll dein script über alle Kundennamen laufen?
 
Hey,

ich hab da mal was entwickelt. Es müssen dafür rsync und python installiert sein.
Je nachdem, was Du jetzt genau brauchst - das verstehe ich aus Deiner Erklärung noch nicht so ganz - schau' Dir in der Readme die Optionen --link für inkrementelle/differentielle Backups und --delete für das Löschen der in der Quelle gelöschten files und folders an.


https://github.com/AnonStar/home_backup

Falls Du weitere konkrete Fragen hast, gerne auch per PN.

Für inkrementelle Backups von confluence und jira führe ich das Script bspw so aus:

Code:
/home/anonstar/rsync_mail.py -l /var/atlassian/application-data/backup.log -q -d -u -m meine@mail.tld -c /home/anonstar/rsync_config.properties /var/atlassian/application-data/confluence/backups/ /mnt/pascal/__BACKUP/nuc/confluence/backups/

Für die Mail-Benachrichtigung sieht das Config File rsync_config.properties bspw so aus:
Code:
[SMTPSection]
server.mail=absender@email.tld
server.adress=SMTP-Server
server.user=username
server.password=password
server.port=25


This is a backup-script written in python using rsync. It is tested on Ubuntu 14.04 and Arch Linux (using --legacy). It can backup incremental and differential. It will send you an email and summarize the backup.

Usage:

rsync_mail.py [-h] [-t] [-e EXCLUDE] [-l LOGFILE] [-q] [-m MAIL] [-u] [-d] [-c CONFIG] [--delete] [--legacy] [--check] [--link LINK] [--date] SOURCE TARGET

positional arguments:

SOURCE Specify the directory to backup (SOURCE).

TARGET Specify the directory where the backup should be stored (TARGET).

optional arguments:

-h, --help show this help message and exit

-t, --trash Delete unnecessary files and empty the trash.

-e EXCLUDE, --exclude EXCLUDE Exlude the following directories from backup.

-l LOGFILE, --logfile LOGFILE Specify the logfile to monitor.

-q, --quiet Do not print to stdout.

-m MAIL, --mail MAIL eMail-Adress whereto send the rsync-log to. Use this with the --config option to provide a Properties-File with the SMTP-Server-Config.

-u, --update Keeps files in destination if they are more recent.

-d, --debug Generates a detailed rsync log.

-c CONFIG, --config CONFIG Loads the config from property file.

--delete Deletes files and folders in the backup which has been deleted in the source.

--legacy Support for some systems without the ability to change permissions

--check Checks the transfered files byte-by-byte with a generated checksum. This can take a while. This option verifies that a backup is fully identical with the source.

--link LINK Creates a new Backup and only saves differences to the specified main-backup. For an incremental backup use this option with the argument ->last<-. The script then looksup the last backup in the target directory.

--date Saves the backup into a subfolder named after the actual date in format yyyy-MM-dd into the target directory.

Changelog:

02/15: Pascal Laub: improved the script, added a mail-option.

-Sebastian Gumprich http://zufallsheld.de -Pascal Laub
 
Zuletzt bearbeitet:
Eine einfach Abfrage im Skript kannst du so machen:

Code:
#!/bin/bash

echo Bitte den Namen eingeben:

read name

echo Der eingegebene Name: $name

Ansonsten halt wie von aroxx beschrieben. Wenn du das mehrfach machen willst, kannst du die Namen auch aus einer Liste einlesen und eine Schleife nutzen.
 
Zuletzt bearbeitet:
Hm... es geht bestimmt einfacher, als ein umfangreiches Backupscritp dafür zu benutzen.
Beispiel:
Code:
######################################################
##                                                                                                                 
## This script will copy new files and foders into an users server directory.           
## If files would be overwritten a backup of them will be stored in given backup dir 
## usage: copyNewFiles.sh user backupdir [overrideMoreRecentFlag]                  
## example ./copyNewFiles.sh KundeX /dev/backup                                           
##                                                                                                                  
######################################################

localdir="/dev/local"
serverdir="dev/server"
if [ "${3,,}" == "override" ]; then
  override=true
fi

if [ ! "$1" == "" && -d "$2" && -d "${serverdir}/${1}"]; then
   echo "Copying new files from ${localdir} to ${serverdir}/${1}!"
   IFS=$'\n'; 
   for f in $(find $localdir | grep -v '^${localdir}$' | ); do 
     serverfile=${serverdir}/${1}/${f}
     if [-f  $serverfile ]; then
       # Wenn Datei auf Server bereits existiert
       if [ ! $override ]; then
        # Wenn Override-Flag NICHT gesetzt ist
        if [ "$f" -nt "$serverfile" ]; then
          # Wenn lokales file neuer als server file
          mkdir -p ${2}/${1}/$(dirname $f)
          cp "$f" "${2}/${1}/$(dirname $f)"
          mkdir -p ${serverdir}/${1}/$(dirname $f)
          cp -f "$f" "$serverfile"
        fi
      else 
        # Wenn override-flag gesetzt
        mkdir -p ${2}/${1}/$(dirname $f)
        cp "$f" "${2}/${1}/$(dirname $f)"
        mkdir -p ${serverdir}/${1}/$(dirname $f)
        cp -f "$f" "$serverfile"
      fi 
    else
      # Wenn file auf server nicht existiert
      mkdir -p ${serverdir}/${1}/$(dirname $f)
      cp -f "$f" "$serverfile"
    fi
   done
   echo "All files copied to the server!"
   exit 0;
elif [ "$1" == "" ]; then
    echo "No customer specified, please specify a customer as argument 1!"
    exit 1;
elif [ ! -d "$2" ]; then
   echo "Specified backup dir ${2} does NOT exist! Aborting ..."
   exit 1;
elif [ ! -d "${serverdir}/${1}" ]; then
   echo "The customer ${1} does not exist on the server in ${serverdir}! Aborting ..."
   exit 1
else
    echo "This should have never happened, sorry =("
    exit 1;
fi
exit 0;

Achtung: ungetestet!
Hinweis: Eventuell auftretende Kopierfehler werden nicht behandelt.

Ich hoffe, das hilft!

Grüße,

Anon
 
Zuletzt bearbeitet:
Zurück
Oben