Prüfsummen-Datenbank

Hallo zusammen,

möchte eine DB aufbauen, die die Konsistenz meiner Backups mittels Prüfsummen automatisch prüft.
Die zugehörige Tabelle sieht wie folgt aus:

 Tabelle »public.psum«
  Spalte   |             Typ             |                       Attribute
-----------+-----------------------------+-------------------------------------------------------
 id        | integer                     | not null Vorgabewert nextval('psum_id_seq'::regclass)
 datei     | character varying(1000)     | not null
 pruef     | character(64)               | not null
 aenderung | timestamp without time zone | not null
Indexe:
    "pk_psum" PRIMARY KEY, btree (id)

Nun meine Frage: Wie kann ich mit Bash (oder Perl) sämtliche Dateien unterhalb eines Verzeichnisses durchgehen?
Also beispielsweise alles unterhalb von “/beispiel” ?
Nächste Frage: Wie Prüfe ich in Perl, ob sich eine Prüfsumme geändert hat, um z.B. eine Meldung in eine Logdatei zu schreiben?
Das Verfahren ist ja:

Prüfsumme der Datei bilden -> mit DB abgleichen -> Veränderung? Falls ja -> Eintrag in Logdatei

Wie kann man das performant lösen?
Super wäre, man könnte das mit einem SQL-Befehl machen und nicht umständlich über Perl realisieren.

Möchte dafür übrigens SHA256 verwenden.

Was ist nun die Frage?

:smiley: immer langsam… siehe oben!

Ah, die Frage kam später :wink:

Das ist kein Job für die DB, die hat keinen Zugriff auf das Filesystem (von untrusted languages mal abgesehen).

Also, baue Dir in Perl oder whatever eine passende Funktion, die das macht.

Genau, die Datenbank selber kann sowas natürlich nicht und ich würde das dementsprechend in Perl implementieren.
Mein Problem ist nun: ich bin Perl-Anfänger. Zwar kann ich ansich programmieren, aber eben nicht in Perl.
Den eigentlichen Durchlauf durch das Dateisystem inkl. Erstellen der Prüfsummen würde ich von einem simplen Bash-Skript erledigen lassen.
Dieses soll dann ein Perl-Skript aufrufen, was wiederum die Verbindung zur Datenbank herstellt und die entsprechenden Abfragen oder inserts erledigt.
Aber wie gestalte ich in Perl z.B. die Abfrage

if (pruefsumme != pruefsumme_in_DB)
   schreibe_in_log()

Muss ich dazu eine Select-Abfrage bauen, die den Wert in der Datenbank sucht und diesen dann zurück gibt?
Sodass ich anschließend einfach zwei Variablen im if-Teil miteinander vergleichen kann?
Oder gibt es da einen geschickteren Weg?

Davon gehe ich aus. Du kannst aber auch aus der Bash heraus die DB abfragen.

Habe ich schonmal versucht, war wenig Erfolg gekrönt.
Oder kannst du mir ein Beispiel geben, wie ich die Ausgabe eines Select in Bash in einer Variablen speichere?



[root@akretschmer ~]# heute=$(psql -t test -c "select current_date"); echo $heute;
2014-05-05