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