Instantly share code, notes, and snippets.

@raphiz /sync.sh
Last active Apr 5, 2016

Embed
What would you like to do?
HSR Skripteserver Sync-Skript
#!/bin/bash
set -e
###################
## Konfiguration ##
###################
## Ersetze <your username> um nicht jedes mal nach deimem HSR Benutzername gefragt zu werden
# HSR_USERNAME="<your username>"
## Ersetze <your password> um nicht jedes mal nach deimem HSR Passwort gefragt zu werden
# HSR_PASSWORD="<your password>"
## Ersetze /home/user/HSR/skripte durch das Verzeichnis, in das synchronisiert werden soll
## um nicht jedes mal gefragt zu werden
# DESTINATION="/home/user/HSR/skripte"
## IP des HSR servers
SERVER='152.96.90.26'
## Name des samba shares
SHARE='skripte'
## Setze den Wert auf true, wenn du immer als root mit mount mounten möchtest
FORCE_USE_MOUNT=false
## Setze den Wert auf true, wenn der share in der fstab eingetragen ist
MOUNT_WITH_FSTAB=false
## Die Benutzer-ID wird für gvfs-mount benötigt
USER_ID="$(id -u)"
## Verzeichnis, welches genutzt werden soll, wenn 'mount' genutzt wird
MOUNTDIR='/mnt/hsr/'
## Das Kommando, welches zur Synchronisation genutzt wird
SYNC_COMMAND="rsync -ah --delete --out-format=%n%L"
############################
## Ende der Konfiguration ##
############################
## Frage nach Benutzername, wenn dieser nicht gesetzt ist
if [ ! -n "$HSR_USERNAME" ] && [ ! "$MOUNT_WITH_FSTAB" = true ]; then
read -p "Dein HSR Username: " HSR_USERNAME
fi
## Frage nach Passwort, wenn dieses nicht gesetzt ist
if [ ! -n "$HSR_PASSWORD" ] && [ ! "$MOUNT_WITH_FSTAB" = true ]; then
read -s -p "Dein HSR Passwort: " HSR_PASSWORD
echo
fi
## Frage nach Zielverzeichnis, wenn dieses nicht gesetzt ist
if [ ! -n "$DESTINATION" ]; then
read -p "In welches Verzeichnis soll synchronisiert werden (./skripte): " DESTINATION
if [ ! -n "$DESTINATION" ]; then
DESTINATION=$(realpath "./skripte")
fi
fi
## Erstelle Zielverzeichnis, wenn dieses noch nicht existiert
if [ ! -d "$DESTINATION" ]; then
mkdir -p $DESTINATION
fi
### Nutze gvfs-mount falls erwünscht und verfügbar - sonst nutze mount
if [ ! "$FORCE_USE_MOUNT" = true ] && [ -x "$(command -v gvfs-mount)" ]; then
SOURCE="/run/user/$USER_ID/gvfs/smb-share:server=$SERVER,share=$SHARE"
if [ ! -d "$SOURCE" ]; then
echo "Einhängen mit gvfs-mount...."
gvfs-mount "smb://$SERVER/$SHARE" > /dev/null << ANSWERS
$HSR_USERNAME
hsr.ch
$HSR_PASSWORD
ANSWERS
sleep 1
if [ ! -d "$SOURCE" ]; then
# gvfs ist so grässlich langsam....
sleep 3
fi
if [ ! -d "$SOURCE" ]; then
echo "Einhängen ist fehlgeschlagen!" >&2
exit 1
fi
fi
else
echo "Einhängen mit mount..."
### Erstelle das Verzeichnis, in welches gemounted werden soll, falls dieses noch nicht existiert
if [ ! -d "$MOUNTDIR" ]; then
sudo mkdir -p $MOUNTDIR
fi
# Try to mount via fstab....
if [ "$MOUNT_WITH_FSTAB" = true ]; then
mount $MOUNTDIR
else
mount -t cifs "//$SERVER/$SHARE" $MOUNTDIR -o user=$HSR_USERNAME,password=$HSR_PASSWORD,iocharset=utf8
fi
SOURCE="$MOUNTDIR"
fi
function synchronize() {
# Baue --exculde parameter für rsync zusammen
EXCLUDE=""
for i in "${@:3}"; do
EXCLUDE="$EXCLUDE --exclude $i"
done
echo "Synchronisiere $2 -> $1..."
$SYNC_COMMAND $EXCLUDE $SOURCE/$2 $DESTINATION/$1 | tee -a "$DESTINATION/sync.log"
echo "Synchronisation $2 -> $1 abgeschlossen"; echo; echo
}
## Beginne mit der synchronisation
echo >> "$DESTINATION/sync.log"
echo "--------------------------------------------------------------------------------" | tee -a "$DESTINATION/sync.log"
echo "Startzeitpunkt: $(date +'%d.%m.%Y %T')" | tee -a "$DESTINATION/sync.log"
echo "Quelle: $MOUNTDIR" | tee -a "$DESTINATION/sync.log"
echo "Ziel: $DESTINATION" | tee -a "$DESTINATION/sync.log"
echo "--------------------------------------------------------------------------------" | tee -a "$DESTINATION/sync.log"
echo | tee -a "$DESTINATION/sync.log"
###########################################################
## Konfiguration der zu synchronisierenden Verzeichnisse ##
###########################################################
# synchronize <zielpfad relativ zum Zielverzeichnis> <Quellenpfad relativ vom Skripte-Share-Root> <zu ignorierender Pfad, relativ zur Quelle> <2. zu ignorierender Pfad> ... <n. zu ignorierender Pfad>
synchronize "InfSi1" "Informatik/Fachbereich/Informationssicherheit_1_-_Grundlagen/InfSi1/" "Archiv/" "Videos/" "*.exe"
### Aushängen
echo "Aushängen...."
if [ "$SOURCE" == "$MOUNTDIR" ]; then
umount $MOUNTDIR
else
sleep 2
gvfs-mount -u "smb://$SERVER/$SHARE"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment