Aufgabe: Abgleichen von Verzeichnissen: updt

Gesucht ist ein Skript updt (für update), mit dessen Hilfe Verzeichnisse auf einen gleichen Stand gebracht werden können.



Anwendungsbeispiel:

Ich habe auf einem Rechner (aw33), der immer zuhause steht, alle Programme und Dokumente liegen, die ich im Lauf der Jahre selbst erstellt habe, eingescannte Bilder, viele Treiber von anderen gesaugt, Onlinehandbücher, und so weiter, in einem riesigen Verzeichnis liegen (/home/archiv). Andere Rechner im lokalen Netz mounten dieses Verzeichnis über NFS, und so kann ich zuhause von jedem Rechner aus darauf zugreifen. So weit, so gut.

Da ich manchmal mit einem Laptop unterwegs bin, und auch mal unterwegs etwas schreibe (Rechnungen beispielsweise, lechz!) oder ändere (Termine), manchmal aber auch zuhause Änderungen mache (in /home/archiv), brauche ich erstens einen Teil des Archivverzeichnisses auch unterwegs (aber nicht alles, weil das zuviel wäre), und zweitens hatte ich immer das Problem, daß ich auf dem Laptop geänderte Dateien in das Archivverzeichnis kopieren muß, und im Archivverzeichnis geänderte Dateien dafür auf den Laptop. Wer weiß aber noch nach ein paar Tagen sicher, was er wo geändert hat?

Meine derzeit praktizierte Lösung sieht so aus: Auf dem zentralen Rechner aw33 gibt es neben dem vollständigen Verzeichnis aw33:/home/archiv noch ein kleineres aw33:/home/miniarchiv. Das ist entstanden als Kopie von aw33:/home/archiv; von Hand habe ich dann alles darin gelöscht, was ich unterwegs ziemlich sicher nicht brauche. Auf dem Laptop aw35 halte ich eine Kopie davon (also aw35:/home/miniarchiv). Alle aktuell interessanten Dateien sind jetzt dreifach vorhanden (aw33:/home/archiv, aw33:/home/miniarchiv, aw35:/home/miniarchiv).

Die nicht ganz so aktuellen Dateien sind nur in aw33:/home/archiv vorhanden.

Die aktuellen Dateien können jetzt entweder auf aw33 oder auf dem aw35 in /home/miniarchiv geändert werden. Wenn ich den Rechner wechsele (bisher auf aw33 gearbeitet, in nächster Zeit auf aw35, oder umgekehrt), dann müssen die beiden miniarchiv-Verzeichnisse so abgeglichen werden, daß alle Dateien, die auf aw33 neuer sind, von aw33 nach aw35 kopiert werden, und umgekehrt. Danach muß dann alles, was in aw33:/home/miniarchiv neuer ist als in aw33:/home/archiv noch in diese Richtung kopiert werden, aber nicht zurück. Das ist natürlich gut geeignet, mit einem Programm automatisiert zu werden.



Da ähnliche Fälle (Dateien in zwei oder mehr verschiedenen Verzeichnissen abgleichen, mal in beide Richtungen, mal nur in eine) öfter vorkommen, lautet die Aufgabenstellung:

Gesucht ist ein Shellskript updt, das man mit den Namen von zwei oder mehr Verzeichnissen aufrufen kann. Die Dateien werden so kopiert, daß danach in allen Verzeichnissen die jeweils neueste Dateiversion zu finden ist. Mit einer Option (ich habe -1 gewählt) kann man festlegen, daß nur in der Richtung kopiert wird, in der auch die Verzeichnisse angegeben sind (z.B. kopiert

      updt -1 /home/miniarchiv /home/archiv
neuere Dateien von /home/miniarchiv nach /home/archiv, aber nicht zurück).

Mit einer weiteren Option -v kann man sich anzeigen lassen, was alles wohin kopiert wird.

Musterlösung siehe Lösung: Abgleichen von Verzeichnissen: updt.

AnyWare@Wachtler.de