Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ########################################################################
- # $Id: mirror-dynamics,v 1.9 2014/02/09 01:36:20 elias Exp $
- #
- # mirror-dynamics
- #
- # Vereinfachtes Aktualisieren von Websites, bei denen immer wieder
- # etwas dazu kommt.
- #
- # Achtung! Für jede Website wird ein Unterverzeichnis angelegt. Anhand
- # dieses Unterverzeichnisses entscheidet das Skript, ob gemirrort oder
- # aktualisiert werden soll. Es kann also einfach eine neue Site
- # angegeben werden, ohne dass man auf etwas achten muss. Natürlich ist
- # diese Vorgehensweise ein kleines bisschen quick and dirty.
- #
- # Um das ganze dann in meine normale Hierarchie zu bringen, verwende
- # ich einfach symbolische Links. Das ist ebenfalls ein brachial
- # einfaches Verfahren, aber ungleich bewährter.
- #
- ########################################################################
- # Paranoia!
- PATH=/bin:/usr/bin
- # Optionen für httrack
- htopts='-P "127.0.0.1:8118" -X0 -s0 -%u -%P -%k -%B -%s -F "Mozilla/5.0"'
- #
- # Diese Optionen enthalten auch die Verwendung eines lokal installierten
- # Privoxy-Proxyservers. Das entfernt einen Großteil von Tracking-Skripten
- # und Werbung aus den gespiegelten Seiten. Wenn die Installtion von
- # Privoxy zu aufwändig wirkt, einfach stattdessen die folgende Zeile nehmen:
- #
- # htopts='-X0 -s0 -%u -%P -%k -%B -%s -F "Mozilla/5.0"'
- # Zielverzeichnis für die Archive
- #
- # Dieses Zielverzeichnis kann sehr voll werden, eventuell sollte es auf
- # einer anderen Partition landen. Wenn es nicht vorhanden ist, wird es
- # automatisch angelegt.
- target=~/.dynamic-mirror
- # Wenn dieses Zielverzeichnis nicht existiert, wird es angelegt
- test -d $target || mkdir -p $target
- # Name des Skriptes
- pname=$(basename $0)
- # Kein Argument? Hilfestellung!
- if test -z "$1"
- then
- echo "Missing website or option" 1>&2
- echo "Invoke '$pname -h' for help" 1>&2
- exit 1
- fi
- # Optionen behandeln
- case $1 in
- -h) # Hilfe anzeigen
- echo "Usage: $pname [website]"
- echo " or: $pname [option]"
- echo
- echo "Options"
- echo " -h show this help and exit"
- echo " -l list already mirrored websites and exit"
- echo " -r [website] remove a mirrored website"
- echo " -s [website] create symbolic link to mirror and exit"
- exit
- ;;
- -l) # Existierende Website-Archive auflisten
- cd $target || exit 1
- ls -lrt |
- awk '
- BEGIN { cnt = 0 }
- $9 ~ /^htt-/ { gsub(/^htt-/, "", $9)
- printf "%-39s %s %02d %s\n", $9, $6, $7, $8
- cnt++
- }
- END { if (cnt == 0) print "No active mirrors" } '
- exit
- ;;
- -r) # Website-Archiv entfernen
- if test -z "$2"
- then
- echo "Missing website argument" 1>&2
- exit 1
- fi
- site=$2
- httdir=$target/htt-$site
- if test ! -d $httdir
- then
- echo "Mirror for website $site does not exist" 1>&2
- exit 1
- fi
- rm -rI $httdir
- echo "Website $site removed."
- exit
- ;;
- -s) # Symbolischen Link erzeugen
- if test -z "$2"
- then
- echo "Missing website argument" 1>&2
- exit 1
- fi
- site=$2
- httdir=$target/htt-$site
- mirdir=$httdir/$site
- if test ! -d $httdir
- then
- echo "Mirror for website $site does not exist" 1>&2
- exit 1
- fi
- if test ! -d $mirdir
- then
- echo "Missing website in mirror directory" 1>&2
- exit 1
- fi
- ln -s $mirdir . | exit 1
- exit
- ;;
- -*) # Unbekannte Option
- echo "Unknown option $1" 1>&2
- echo "Invoke '$pname -h' for help" 1>&2
- exit 1
- ;;
- esac
- # Entferne Protokollangabe (diese führt zu Fehlern)
- site=$(echo $1 | sed 's|^http.*://||')
- # Entferne angegebene Unterverzeichnisse fürs angelegte Verzeichnis
- # Sonst wird es später schnell ein bisschen hässlich
- dsite=$(echo $site | sed 's|/.*$||')
- # Unterscheide zwischen existierendem und neuem Archiv
- trackdir=$target/htt-$dsite
- if test -d $trackdir
- then
- addline='--update'
- desctext='aktualisiert'
- else
- mkdir $trackdir
- addline=$site
- desctext='angelegt'
- fi
- # Und los gehts!
- notify-send -i info "mirror-dynamics
- Der Mirror der Website
- $site
- wird jetzt $desctext…
- Dieser Vorgang kann einige Zeit dauern."
- cd $trackdir
- if httrack $htopts $addline
- then
- icon='info'
- desctext2="Das Archiv wurde erfolgreich $desctext"
- else
- icon='error'
- desctext2='Es ist ein Fehler aufgetreten'
- fi
- notify-send -i $icon "mirror-dynamics
- Website-Archiv '$site'
- $desctext2."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement