Обновить хэш-файл при повторной проверке файлов

Обновить хэш-файл при повторной проверке файлов

В настоящее время я сохраняю каждую папку в хэш-файле с помощью следующего кода

find folder/ -type f -exec sha256sum {} > checksumfolder.txt \;

Мне интересно, возможно ли вместо проверки/пересчета и повторного создания этого txt-файла просто обновить старый txt-файл и добавить вновь добавленные файлы, у которых нет хеша?

решение1

Создайте файл Makefileсо следующим содержимым:

SHAS := $(patsubst folder/%, sha/%, $(shell find folder/ -type f))

all: sha $(SHAS) checksumfolder.txt

sha:
    mkdir sha

sha/%: folder/%
    sha256sum $< > $@

checksumfolder.txt: $(SHAS)
    cat $(SHAS) > checksumfolder.txt

Если теперь запустить makeвнутри родительского каталога , будет создан folder/новый каталог, содержащий sha256sum каждого файла в . В конце мы объединяем все файлы в .sha/folder/checksumfolder.txt

Когда вы побежите makeво второй раз, ничего не будет сделано.

Когда вы открываете файл folder/или создаете новый и запускаете его, makesha256sum этого конкретного файла обновляется.

Чтобы узнать больше о makeбеге info make.


Если вы никогда не изменяете файл (только добавляете новые), вы можете просто запомнить имя файла с последним временем изменения, когда вы в последний раз запускали команду, findи выбрать только более новые файлы с помощью:

find -newer REFERENCE_FILE

… или прямая временная метка (см. date(1) DATE STRING) с

find -newermt TIME_STAMP

Связанный контент