Mit einem Shell-Skript können Sie das leicht erreichen:
- Vergleichen Sie die Änderungszeit der Dateien mit der der Liste (oder dem registrierten Zeitpunkt).
- Wenn eine Datei neuer als die Liste ist, führen Sie
sha256sum
sie aus und ersetzen Sie sie in der Liste
Etwas in der Richtung von
HASHCHANGED=$(stat -c '%Y' "/path/to/listfile") # Or extract the timestamp from the list for FILE in /path/to/files/* ; do FILECHANGED=$(stat -c '%Y' "$FILE") if test $FILECHANGED -ge $HASHCHANGED; then NEWHASH=$(sha256sum "$FILE") # put the hash into your list, this depends on the list format fi done
BEARBEITEN
Aus den Kommentaren verstehe ich, dass es kein vordefiniertes Listenformat gibt, wie ich es von der OQ angenommen hatte. Daher ist es normal, das Standardformat zu sha256sum
verwenden. Wir können das Skript jetzt von oben auf eine vollständige Lösung erweitern:
# Configuration HASHFILE="/path/to/hashfile" FILEMASK="/path/to/files/*.suffix" HASHCHANGED=$(stat -c '%Y' "$HASHFILE") while read FILE ; do test -f "$FILE" || continue FILECHANGED=$(stat -c '%Y' "$FILE") if test $FILECHANGED -ge $HASHCHANGED; then NEWHASH=$(sha256sum "$FILE") cat "$HASHFILE" | grep -ve "\\s$FILE\$" > "$HASHFILE.tmp" echo "$NEWHASH" >> "$HASHFILE.tmp" cat "$HASHFILE.tmp" | sort -u > "$HASHFILE" fi done < <(eval "ls -1 $FILEMASK") #Need an eval here to allow * in mask
Sie sollten die ursprüngliche Liste mit säen sha256sum /path/to/files/*mask