Advertisement
goebelmasse

mirror-dynamics

Apr 22nd, 2014
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.37 KB | None | 0 0
  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."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement