Hallo zusammen,
ich habe mir ein kleines Bash-Script erstellt. Dieses Script macht folgendes:
1.) Es ermittelt alle Dateien in einem "Import"-Verzeichnis
2.) Wenn dort Dateien vorhanden sind (z.B. "a.jpg"), kopiert es diese in ein "work"-Verzeichnis
3.) In dem "work"-Verzeichnis existiert jeweils eine Backup-Datei (in diesem Fall: "a.jpg_backup"). Sollte keine Backup-Datei existieren, dann wird eine Dummy-Backup-Datei angelegt.
4.) Nun wird mit dem Befehl cmp vergleichen, ob die Dateien identisch sind.
5a) Wenn Sie NICHT identisch sind, dann wird die vorhandene Backup-Datei ("a.jpg_backup") gelöscht und die andere Datei umbenannt ("a.jpg" –> "a.jpg_backup")
5b) Wenn Sie identisch sind, dann soll "a.jpg" per E-Mail verschickt werden. Anschließend werden "a.jpg" und "a.jpg_backup" gelöscht.
Das Script hierzu sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #!/bin/bash BASENAME=$(which basename) BASEDIR=$(which basedir) CMP=$(which cmp) UUENVIEW=$(which uuenview) DIRNAME=$(which dirname) GREP=$(which grep) VERZEICHNIS="/srv/files/samba/frechdachs" IMPORTVERZ="import" ARBEITSVERZ="work" EMAIL="frechdachs@provider.tld" find "${VERZEICHNIS}/${IMPORTVERZ}" -mindepth 1 -maxdepth 1 -type f \ > "${VERZEICHNIS}/${ARBEITSVERZ}/alle_dateien" if [ -s "${VERZEICHNIS}/${ARBEITSVERZ}/alle_dateien" ] then # Es gibt Arbeit while read DATEI do # a) Datei kopieren NAME=$(${BASENAME} "${DATEI}") echo "NAME = ${NAME}" cp "${VERZEICHNIS}/${IMPORTVERZ}/${NAME}" "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}" # b) Wenn es noch keine Backup-Datei gibt, dann muss ein Dummy angelegt werden if [ ! -f "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}_backup" ] then echo "123" > "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}_backup" fi # c) Dateien vergleichen if ${CMP} -s "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}" "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}_backup" then echo "Dateien sind identisch" #${UUENVIEW} -s "Scan vom Multifunktionsdrucker" \ # -b "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}" \ # -m ${EMAIL} -a echo "${UUENVIEW} -s \"Scan vom Multifunktionsdrucker\" -b \"${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}\" -m ${EMAIL} -a" sleep 5 rm "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}" rm "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}_backup" rm "${VERZEICHNIS}/${IMPORTVERZ}/${NAME}" else # Dateien sind NICHT identisch echo "Dateien sind nicht identisch" rm "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}_backup" mv "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}" \ "${VERZEICHNIS}/${ARBEITSVERZ}/${NAME}_backup" fi done < "${VERZEICHNIS}/${ARBEITSVERZ}/alle_dateien" fi # end if [ -s "${VERZEICHNIS}/${ARBEITSVERZ}/alle_dateien" ] rm "${VERZEICHNIS}/${ARBEITSVERZ}/alle_dateien" |
Nun führe ich das Script aus. Im dem Import-Verzeichnis befinden sich 5 Dateien, und von diesen Dateien existieren noch keine Backup-Files. Entsprechend sieht die Ausgabe so aus:
NAME = Image-000.jpg Dateien sind nicht identisch NAME = Image-002.jpg Dateien sind nicht identisch NAME = Image-001.jpg Dateien sind nicht identisch NAME = Image-004.jpg Dateien sind nicht identisch NAME = Image-003.jpg Dateien sind nicht identisch
Nun rufe ich das Script erneut auf. Die Original-Dateien haben sich nicht geändert, demnach sind sie identisch mit den Backup-Dateien und das Script gibt folgendes aus:
NAME = Image-000.jpg Dateien sind identisch /usr/bin/uuenview -s "Scan vom Multifunktionsdrucker" -b "/srv/files/samba/frechdachs/work/Image-000.jpg" -m frechdachs@provider.tld -a NAME = Image-002.jpg Dateien sind identisch /usr/bin/uuenview -s "Scan vom Multifunktionsdrucker" -b "/srv/files/samba/frechdachs/work/Image-002.jpg" -m frechdachs@provider.tld -a NAME = Image-001.jpg Dateien sind identisch /usr/bin/uuenview -s "Scan vom Multifunktionsdrucker" -b "/srv/files/samba/frechdachs/work/Image-001.jpg" -m frechdachs@provider.tld -a NAME = Image-004.jpg Dateien sind identisch /usr/bin/uuenview -s "Scan vom Multifunktionsdrucker" -b "/srv/files/samba/frechdachs/work/Image-004.jpg" -m frechdachs@provider.tld -a NAME = Image-003.jpg Dateien sind identisch /usr/bin/uuenview -s "Scan vom Multifunktionsdrucker" -b "/srv/files/samba/frechdachs/work/Image-003.jpg" -m frechdachs@provider.tld -a
Bis hier funktioniert alles wunderbar.
Nun aber gibt es folgendes Problem:
Zur Zeit wird uuenview
gar nicht ausgeführt, weil die Zeilen 38 bis 40 Kommentare sind. Bei diesen Zeilen entferne in das "#"-Zeichen.
Im ersten Script-Durchlauf erhalte ich die gleiche Ausgabe:
NAME = Image-000.jpg Dateien sind nicht identisch NAME = Image-002.jpg Dateien sind nicht identisch NAME = Image-001.jpg Dateien sind nicht identisch NAME = Image-004.jpg Dateien sind nicht identisch NAME = Image-003.jpg Dateien sind nicht identisch
Nun rufe ich das Script erneut auf. Die Original-Dateien haben sich nicht geändert, demnach sind sie identisch mit den Backup-Dateien. Aber es passiert folgendes:
NAME = Image-000.jpg Dateien sind identisch /usr/bin/uuenview -s "Scan vom Multifunktionsdrucker" -b "/srv/files/samba/frechdachs/work/Image-000.jpg" -m frechdachs@provider.tld -a
Es wird nur die erste Datei "bearbeitet", die anderen Dateien werden nicht berücksichtigt!
Für mich sieht es fast so aus, als wenn uuenview
es irgendwie schafft, das Script zu beenden - eine andere Idee habe ich dazu nicht.
Habt Ihr eine Idee für dieses Verhalten?
Vielen Dank für Eure Mühe!
Liebe Grüße, frechdachs