Ich bin gerade dabei, eine Lösung für das gleiche Problem zu entwickeln.
Grundsätzlich ist mein Ziel ein System, das das Rückgängigmachen und Wiederherstellen mit Granularität auf Dateiebene ermöglicht.
Beginnen Sie mit Ihrer Frage und arbeiten Sie rückwärts ...
- Um mit der Standardkonfiguration zu vergleichen, müssen wir zuerst die Originale all dieser Dateien irgendwo speichern. Dann können wir mit so etwas wie ...
DIFFDIR= ......
ARCDIR=./.archives # see below
function getlastarchive() {
... code to return last archived version ...
}
for FILE in /etc/*
do
ARCFILE="$(getlastarchive $FILE)"
diff $ARCDIR/$ARCFILE /etc/$FILE >$DIFFDIR/$FILE.diff
done
- Um die Originale zu speichern, habe ich mich für die Konvention entschieden, ein einzelnes
.archives
Unterverzeichnis in einem beliebigen Verzeichnis mit einer geänderten Datei zu haben. Es wird nach Bedarf von einem file-archive
Skript erstellt.
- Wenn Sie nur eine Ebene rückgängig machen möchten, müssen Sie die unveränderte Datei nur in das
.archives
Verzeichnis kopieren, bevor sie geändert wird.
- Für unbegrenztes Rückgängigmachen benötigen wir ein Versionsschema. Eine naheliegende Wahl ist ein Datums- / Uhrzeitstempel, der an den Namen der archivierten Version angehängt wird. Etwas wie...
Files: /etc/hosts
/etc/resolv.conf
Archived Versions: /etc/.archives/hosts.20121219015459
/etc/.archives/resolv.conf.20121219015459
- Stattdessen verwende ich nur eine automatisch berechnete inkrementelle Version #, wie in ...
Files: /etc/hosts
/etc/resolv.conf
Archived Versions: /etc/.archives/hosts.00
/etc/.archives/resolv.00.conf
- Die Versionsnummer steht vor der Erweiterung, da ich diese auch für bearbeitete Versionen von Bildern verwende, deren Erweiterungen (.jpg, .png usw.) intakt sein müssen, um von vielen Softwareprogrammen richtig erkannt zu werden. Wenn eine Datei keine Erweiterung hat, wird die Versionsnummer nur an das Ende angehängt. Der Code dafür ist komplexer, wird aber sofort ausgeführt, also kein Problem. Ein Fall kann für eine Reihe anderer Schemata gemacht werden, aber das funktioniert für mich.
Hoffe das hilft!