Вы можете легко достичь этого с помощью сценария оболочки:
- Сравните время модификации файлов со списком (или зарегистрированным моментом времени)
- Если файл новее списка, запустите
sha256sum
его и замените в списке
Нечто подобное
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
РЕДАКТИРОВАТЬ
Из комментариев я понимаю, что нет предопределенного формата списка, как я предполагал из OQ. это делает естественным использование стандартного sha256sum
формата. Теперь мы можем расширить скрипт сверху до полного решения:
# 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
Вы должны заполнить начальный список с помощью sha256sum /path/to/files/*mask