HSRSync NoMSOffice
Aus alt.comp.hsr
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