![](https://seccdn.libravatar.org/avatar/440955ab796fb403fba608d0df23b654.jpg?s=120&d=mm&r=g)
Hallo Bernd, hallo David, hallo Leute, vielen Dank für die Erklärung und die Anregungen. Ich habe vorhin noch ein wenig am Script gebastelt (bevor ich meine heutigen Mails abgerufen habe). Bisher wird allerdings nur ausgegeben, ob eine Datei verändert, gelöscht oder neu erstellt wurde, es fehlt also noch mkdir und cp ;-) Hier also mein Zwischenstand: ---------- diffdirs.sh ---------- # Aufruf: # diffdirs $verz_alt $verz_neu $verz_fuer_diffs # (derzeit noch hardcoded fuer Testzwecke) verz_alt=/tmp/verz_a verz_neu=/tmp/verz_b verz_diffs=/tmp/verz_diffs # mögliche Ausgaben von diff: # Only in /tmp/verz_a/: test # Files /tmp/verz_a/test3 and /tmp/verz_b/test3 differ # Only in /tmp/verz_a/verz_a1: muster # falls $1 = "Files" -> Datei geändert -> $2 [2] ins Changed-Verzeichnis # falls $1 = "Only" und $3 = "verz_neu" -> neue Datei -> $4 ins Changed-Verz. # falls $1 = "Only" und $3 = "verz_alt" -> gelöschte Datei -> Hinweis ausgeben ##### Verzeichnisinhalt vergleichen... diff -r -q $verz_alt/ $verz_neu/ | while read Zeile; do set -- $Zeile ##### Datei geändert oder nur in einem Verzeichnis? case "$1" in Files) # geänderte Datei echo "geänderte Datei: " ${2#$verz_alt/};; Only) # Datei nur in einem Verzeichnis ##### Datei nur in $verz_alt vorhanden, also gelöscht -> Hinweistext if [ ${3:0:${#verz_alt}} == $verz_alt ] ; then echo -n "Datei gelöscht: " ; SUBDIR=${3:${#verz_alt}+1}; SUBDIR=${SUBDIR:0:${#SUBDIR}-1}; if [ -n "${SUBDIR}" ]; then echo -n $SUBDIR/ ; fi echo $4 ##### Datei nur in $verz_neu vorhanden, also neu -> nach $verz_diffs kopieren ##### vorläufig nur Hinweistext elif [ ${3:0:${#verz_neu}}==$verz_neu ]; then echo -n "neue Datei: " ; SUBDIR=${3:${#verz_alt}+1}; SUBDIR=${SUBDIR:0:${#SUBDIR}-1}; if [ -n "${SUBDIR}" ]; then echo -n $SUBDIR/ ; fi echo $4 ##### sonstiges (sollte nicht vorkommen) else echo "Unbekannte Diff-Ausgabe :-( (if-Block)" fi ##### wichtig: letzte Zeile vor "esac" muss mit zwei ; enden! Hier also ##### ein Dummy (wird geändert, sobald das Script wirklich fertig ist ;-) test -n a==b;; *) echo "Unbekannte Diff-Ausgabe :-( (case-Block)";; esac; done; exit 0; ---------- diffdirs.sh ---------- Wie man sieht, hat man bash doch geholfen, auch wenn es nicht gerade eine leichte Lektüre ist ;-) Das Einbauen der cp-Befehle und das Anlegen der Verzeichnisse dürfte kein Problem darstellen. Am Donnerstag, 17. Januar 2002 02:27 schrieb David Haller:
Halbwegs robust ist IMO folgendes, mit dem ich gestern angefangen habe, ist aber noch sehr unvollstaendig und ich hatte dich auch flasch verstanden, was du wo haben willst, bietet aber hoffentlich ein paar Ideen, wie du die jew. Zeilen auswerten kannst.
Das auf jeden Fall ;-)
Achso, ist glaube ich weniger performant, aber dafuer glaube ich recht portabel...
==== dirdiff.sh ==== [interessantes Script] ## Achtung: das ist "anfaellig gegen Dateinamen wie z.B.: ## 'XXX and YYY' und 'Files XXX' und 'XXX differ' etc. ## die naechste Zeile sollte letztere beiden Probleme loesen, ## aber Datei-/Verzeichnisnamen mit ' and ' sind wohl kaum ## automatisch aufzuloesen... Das folgende grep sollte diese ## Faelle aber erkennen koennen.
Dort, wo ich dieses Script einsetze, wird mit "normalen" Dateinamen gearbeitet ;-) Es handelt sich z. T. um Dateien, die später mal auf einen Webserver hochgeladen werden, da machen sich Sonderzeichen, Leerzeichen, Umlaute und sonstiger Unfug nicht so gut ;-)
[Rest des interessanten Scripts]
Nochmal herzlichen Dank für Eure Hilfe und die Tips! Gruß Christian *Nachteule* Boltz -- Registrierter Linux-Nutzer #239431 Linux - life is too short for reboots.