goebelmasse

mirror-dynamics

Apr 22nd, 2014
161
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. ########################################################################
  3. # $Id: mirror-dynamics,v 1.9 2014/02/09 01:36:20 elias Exp $
  4. #
  5. # mirror-dynamics
  6. #
  7. # Vereinfachtes Aktualisieren von Websites, bei denen immer wieder
  8. # etwas dazu kommt.
  9. #
  10. # Achtung! Für jede Website wird ein Unterverzeichnis angelegt. Anhand
  11. # dieses Unterverzeichnisses entscheidet das Skript, ob gemirrort oder
  12. # aktualisiert werden soll. Es kann also einfach eine neue Site
  13. # angegeben werden, ohne dass man auf etwas achten muss. Natürlich ist
  14. # diese Vorgehensweise ein kleines bisschen quick and dirty.
  15. #
  16. # Um das ganze dann in meine normale Hierarchie zu bringen, verwende
  17. # ich einfach symbolische Links. Das ist ebenfalls ein brachial
  18. # einfaches Verfahren, aber ungleich bewährter.
  19. #
  20. ########################################################################
  21.  
  22. # Paranoia!
  23. PATH=/bin:/usr/bin
  24.  
  25. # Optionen für httrack
  26. htopts='-P "127.0.0.1:8118" -X0 -s0 -%u -%P -%k -%B -%s -F "Mozilla/5.0"'
  27. #
  28. # Diese Optionen enthalten auch die Verwendung eines lokal installierten
  29. # Privoxy-Proxyservers. Das entfernt einen Großteil von Tracking-Skripten
  30. # und Werbung aus den gespiegelten Seiten. Wenn die Installtion von
  31. # Privoxy zu aufwändig wirkt, einfach stattdessen die folgende Zeile nehmen:
  32. #
  33. # htopts='-X0 -s0 -%u -%P -%k -%B -%s -F "Mozilla/5.0"'
  34.  
  35. # Zielverzeichnis für die Archive
  36. #
  37. # Dieses Zielverzeichnis kann sehr voll werden, eventuell sollte es auf
  38. # einer anderen Partition landen. Wenn es nicht vorhanden ist, wird es
  39. # automatisch angelegt.
  40. target=~/.dynamic-mirror
  41.  
  42. # Wenn dieses Zielverzeichnis nicht existiert, wird es angelegt
  43. test -d $target || mkdir -p $target
  44.  
  45. # Name des Skriptes
  46. pname=$(basename $0)
  47.  
  48. # Kein Argument? Hilfestellung!
  49. if test -z "$1"
  50. then
  51.     echo "Missing website or option" 1>&2
  52.     echo "Invoke '$pname -h' for help" 1>&2
  53.     exit 1
  54. fi
  55.  
  56. # Optionen behandeln
  57. case $1 in
  58.     -h) # Hilfe anzeigen
  59.     echo "Usage: $pname [website]"
  60.     echo "   or: $pname [option]"
  61.     echo
  62.     echo "Options"
  63.     echo "  -h            show this help and exit"
  64.     echo "  -l            list already mirrored websites and exit"
  65.     echo "  -r [website]  remove a mirrored website"
  66.     echo "  -s [website]  create symbolic link to mirror and exit"
  67.     exit
  68.     ;;
  69.     -l) # Existierende Website-Archive auflisten
  70.     cd $target || exit 1
  71.     ls -lrt |
  72.     awk '
  73. BEGIN        { cnt = 0 }
  74. $9 ~ /^htt-/ { gsub(/^htt-/, "", $9)
  75.               printf "%-39s %s %02d %s\n", $9, $6, $7, $8
  76.               cnt++
  77.             }
  78. END          { if (cnt == 0) print "No active mirrors" } '
  79.     exit
  80.     ;;
  81.     -r) # Website-Archiv entfernen
  82.     if test -z "$2"
  83.     then
  84.         echo "Missing website argument" 1>&2
  85.         exit 1
  86.     fi
  87.     site=$2
  88.     httdir=$target/htt-$site
  89.     if test ! -d $httdir
  90.     then
  91.         echo "Mirror for website $site does not exist" 1>&2
  92.         exit 1
  93.     fi
  94.     rm -rI $httdir
  95.     echo "Website $site removed."
  96.     exit
  97.     ;;
  98.     -s) # Symbolischen Link erzeugen
  99.     if test -z "$2"
  100.     then
  101.         echo "Missing website argument" 1>&2
  102.         exit 1
  103.     fi
  104.     site=$2
  105.     httdir=$target/htt-$site
  106.     mirdir=$httdir/$site
  107.     if test ! -d $httdir
  108.     then
  109.         echo "Mirror for website $site does not exist" 1>&2
  110.         exit 1
  111.     fi
  112.     if test ! -d $mirdir
  113.     then
  114.         echo "Missing website in mirror directory" 1>&2
  115.         exit 1
  116.     fi
  117.     ln -s $mirdir . | exit 1
  118.     exit
  119.     ;;
  120.     -*) # Unbekannte Option
  121.     echo "Unknown option $1" 1>&2
  122.     echo "Invoke '$pname -h' for help" 1>&2
  123.     exit 1
  124.     ;;
  125. esac
  126.  
  127. # Entferne Protokollangabe (diese führt zu Fehlern)
  128. site=$(echo $1 | sed 's|^http.*://||')
  129.  
  130. # Entferne angegebene Unterverzeichnisse fürs angelegte Verzeichnis
  131. # Sonst wird es später schnell ein bisschen hässlich
  132. dsite=$(echo $site | sed 's|/.*$||')
  133.  
  134. # Unterscheide zwischen existierendem und neuem Archiv
  135. trackdir=$target/htt-$dsite
  136. if test -d $trackdir
  137. then
  138.     addline='--update'
  139.     desctext='aktualisiert'
  140. else
  141.     mkdir $trackdir
  142.     addline=$site
  143.     desctext='angelegt'
  144. fi
  145.  
  146. # Und los gehts!
  147. notify-send -i info "mirror-dynamics
  148.  
  149. Der Mirror der Website
  150. $site
  151. wird jetzt $desctext
  152.  
  153. Dieser Vorgang kann einige Zeit dauern."
  154. cd $trackdir    
  155. if httrack $htopts $addline
  156. then
  157.     icon='info'
  158.     desctext2="Das Archiv wurde erfolgreich $desctext"
  159. else
  160.     icon='error'
  161.     desctext2='Es ist ein Fehler aufgetreten'
  162. fi
  163. notify-send -i $icon "mirror-dynamics
  164.  
  165. Website-Archiv '$site'
  166. $desctext2."
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×