HSRSync NoMSOffice

Aus alt.comp.hsr
Wechseln zu: Navigation, Suche

Bash-Skript:

#!/bin/bash
###################################################################################
#
# HSR Sync-Script von Sven Bolzern (sbolzern@hsr.ch)
#
##### Beschreibung ################################################################
#
# Dieses Skript synchronisiert die in der MODULES_FILE-Datei spezifizierten Ordner
# und konvertiert gleich alle Microsoft Office Dateien zu PDF-Dateien.
#
# Das Skript greift über die Seite http://skripte.hsr.ch/ auf die Dateien zu.
# Dazu muss man sich entweder im HSR-Secure Netz befinden oder per VPN eingeloggt sein.
# 
# Um dieses Skript zu benutzen, müssen die Programme "unoconv" und "lftp" installiert 
# sein, sowie Libreoffice (da unoconv die Libreoffice-libraries verwendet).
#
###### Anleitung ##################################################################
#
# 1) - libreoffice installieren (wird für die Konvertierung gebraucht).
#    - unoconv und lftp installieren
#
# 2) Datei "HSRModule" erstellen. Die Datei soll pro Zeile einen Pfad enthalten,
#    welcher wie folgender aussehen kann: 
#    Elektrotechnik/Fachbereich/Digital_Signal_Processing_1/DigSig1
#    Für den passenden Pfad zu deinen Modulen, schau dir die 
#    Seite http://skripte.hsr.ch/ an.
#    Eine Raute (#) zu Beginn einer Zeile, kommentiert diese aus.
#
# 3) Pfade MODULE_FILE und TARGET_DIR spezifizieren (siehe unten).
#
# 4) Bei Bedarf, KEEP_ORIGINAL_OFFICEFILES="yes" setzen, damit die Originaldateien
#    leserlich bleiben und vielviel Platz auf der Festplatte verbrauchen.
#    mit ="ask", wirst du bei jeder neuen/geupdateten Office-Datei gefragt.
#
# 5) Nicht vergessen die Datei SyncHSR ausführbar zu machen (sudo chmod +x SyncHSR).
#
###################################################################################
MODULES_FILE="/home/mylogin/HSRModule"
TARGET_DIR="/mnt/shared/HSR/"

KEEP_ORIGINAL_OFFICEFILES="hell, no!"
###################################################################################

process_files()
{
if [ $# == 1 ]
then
echo "$1" | grep "$target_dir" | grep get | (while read line; do
 if ( ( expr length "$line" > 1 )  && [[ $line == *"$target_dir"*  ]] ) ; then
  path="${line%% http*}/${line##*\/}"
  path="/${path#*\/}"
  if ( [[ $path == *.xls[x] ]] || [[ $path == *.ppt[x] ]] || [[ $path == *.doc[x] ]]) ; then
   echo "Trying to convert Office-File: $path"
   unoconv "$path"
    if [ "$?" == 0 ] ; then
     echo "Konvertierung war erfolgreich."
     case $KEEP_ORIGINAL_OFFICEFILES in
      yes ) keep="yes";;
      ask ) 
       while true; do
        read -p "Soll die originale Office-Datei gelöscht werden um Speicherplatz zu sparen? [Y/n]" -n 1 yn </dev/tty
        yn="x$yn"
	case $yn in
         x ) keep="no"; break;;
         x[Yy]* ) keep="no"; break;;
         x[Nn]* ) echo "Schon okay, die Datei bleibt wie sie ist.";keep="yes"; break;;
         x* ) keep="no"; echo "Bitte mit y oder n antworten.";;
        esac
       done;;
      * ) keep="no";;
     esac
     if [ "$keep" == "no" ] ; then
      echo "Inhalt der bösen Office-Datei wird gelöscht."
      TMPFILE=`mktemp`
      #save the timestamp
      touch -r $path $TMPFILE
      > $path
      #restore the timestamp after truncation
      touch -r $TMPFILE $path
      rm $TMPFILE
     fi
    else 
     echo "Konvertierung war NICHT erfolgreich! Ohje!"
    fi
  fi
 fi
done )
fi
}


cat $MODULES_FILE | (while read line; do
 if ( ( expr length "$line" > 1 )  && [[ $line != "#"*  ]] ) ; then
  path="http://skripte.hsr.ch/$line" 
  # Der 'gleiche' Befehl ist hier zwei mal geschrieben, da ich ohne den 
  # switch --dry-run die Pfadnamen der zu synchronisierenden Dateien nicht bekomme.
  updated_files=$(lftp -c mirror --only-newer --ignore-size --verbose=1 --dry-run $path $TARGET_DIR)
  lftp -c mirror --only-newer --ignore-size --verbose=1 $path $TARGET_DIR
  process_files "$updated_files"
 fi
done )

#######################################EOF#########################################

Beispiel für die Datei HSRModule:

Elektrotechnik/Fachbereich/Digital_Signal_Processing_1/DigSig1
Elektrotechnik/Fachbereich/Nachrichtentechnik_1/NaT1
#Elektrotechnik/Fachbereich/Wechsel-_und_Drehstromtechnik/WS_DST
Mathematik_Naturwissenschaften/Wahrscheinlichkeitsrechnung_und_Statistik/WrStat
Mathematik_Naturwissenschaften/Physik_3/Ph3SWO