Sh-Script: Verzeichnisänderung abfragen

micp

New Member
Hallo,
wie kann ich das /usr/src Verzeichnis auf Veänderung prüfen, das heisst, Files gelöscht/neu hinzugekommen oder etwas editiert (durch csup)? Dabei ist nur wichtig, ob sich in dem Verzeichnis etwas geändert hat.
Idee war
~# du /<dir>/ |tail -N 1|awk {'print $1'}
um das erste Feld der letzten Ausgabzeile (die Summe aller Dateigrössen) zu bekommen. Nach einem 'make update', das einiges aktualisierte, klappte es auch, der Wert änderte sich. Nach einem zweiten, kurz danach, csup editierte nur eine Datei, nicht mehr, der Wert blieb, trotz Änderung im Verzeichnis, gleich.

Wie könnte ich es noch zuverlässig abfragen?
Zum Einsatz kommt FreeBSD 9 64bit und die (a)sh


viele Grüsse
 
Idee war
~# du /<dir>/ |tail -N 1|awk {'print $1'}
um das erste Feld der letzten Ausgabzeile (die Summe aller Dateigrössen) zu bekommen. Nach einem 'make update', das einiges aktualisierte, klappte es auch, der Wert änderte sich. Nach einem zweiten, kurz danach, csup editierte nur eine Datei, nicht mehr, der Wert blieb, trotz Änderung im Verzeichnis, gleich.

Eine Änderung im Inhalt hat nicht immer eine Änderung der Dateigröße als Konsequenz. Am sichersten gehst du IMHO, wenn du eine Prüfsumme auf die Datei anwendest. Es muss ja nicht MD5/SHA sein, es reicht sicherlich auch etwas, was Dateigröße+mtime verknüpft, so wie es rsync macht.

Rob
 
Code:
#! /bin/sh
set -e -u

SRC='/usr/src/'
CMP='/usr/.src-compare'

if [ ! -e "$CMP" -o "$CMP" -ot "$SRC" ]; then
  echo "$SRC changed"
  # ...
  # now do stuff
  # ...
  touch -r "$SRC" "$CMP"
fi
Achtung: Das detektiert nur Änderungen in /usr/src selbst, nicht in dessen Unterverzeichnissen! Aber du schriebst, dass das das ist, was du willst.
 
Netter Gedanke, wird mal für später abgespeichert.
Leider hat er hier nicht funktioniert, weil, unerwartet, der Timestamp von /usr/src nicht gändert wird, wenn da drunter nur was editiert wurde. Habe es getestet, indem ich in der /usr/src/UPDATING einen beliebigen Buchstaben ersetzt habe, Datei geändert, Grösse bleibt gleich, auch etwas hinzugefügt, Grösse ändert sich, aber die Zugriffszeit von /usr/src nicht. Kopieren einer Datei da rein, klappt es. Merkwürdig.

Danke bis hierhin. Ich tüftele noch ein bisschen, wäre in der Zwischenzeit für weitere Hinweise dankbar. Was letztendlich geklappt hat, poste ich dann hier rein.
 
Guten Morgen,
nach stundenlangem Googlen und Ausprobieren gestern habe ich mich mich jetzt für ein anderes Vorgehen entschieden: nicht mehr fragen, ob /usr/src sich verändert hat, sondern ob csup etwas gemacht hat.
Code:
[...]
csup -L 2 -h cvsup8.FreeBSD.org /etc/stable-supfile 2>&1 |tee /usr/src/update-src.log
grep -iE "(Add|Checkout|Edit|Delete)" /usr/src/update-src.log
if [ $? = 0 ]; then
	echo -e "\nSourcen aktualisiert"
else
	echo -e "\nSourcen unveraendert"
fi
rm /usr/src/update-src.log
[...]
 
moin

alternativ kann man shell befehl stat verwenden , jedoch muss man dann eine 2te tabelle da vorhalten
mit den letzten prueft werten.


ich habe mir ein perl modul gebaut was mit dem perl stat dateien und verzeichnisse ueberwacht.

sieht im prinzip dann so aus.

Code:
use FileWatch;

my $fw=FileWatch->new();

$fw->fw_add({file=>myfile2monitor,});

while (1) {
 my $monitor=$fw->fw_check();
 if ( $monitor->{'returncode'} =~  /[_]_new[_]events/smx ) {
    # do something 
}

sleep 5 ; # interval
}

holger
 
Zuletzt bearbeitet:
Zurück
Oben