В настоящее время я сохраняю каждую папку в хэш-файле с помощью следующего кода
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/
или создаете новый и запускаете его, make
sha256sum этого конкретного файла обновляется.
Чтобы узнать больше о make
беге info make
.
Если вы никогда не изменяете файл (только добавляете новые), вы можете просто запомнить имя файла с последним временем изменения, когда вы в последний раз запускали команду, find
и выбрать только более новые файлы с помощью:
find -newer REFERENCE_FILE
… или прямая временная метка (см. date(1) DATE STRING) с
find -newermt TIME_STAMP