我目前使用以下代码将每个文件夹保存在哈希文件上
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/
,将创建一个新sha/
目录,其中包含 中每个文件的 sha256sum folder/
。最后我们将所有文件连接到checksumfolder.txt
.
当你make
第二次运行时,什么也不会做。
当您触摸一个文件folder/
或创建一个新文件并运行该特定文件的 sha256sum 时make
,该特定文件的 sha256sum 就会更新。
要了解有关make
运行的更多信息info make
。
如果您从不更改文件(仅添加新文件),则只需记住上次运行命令时最新修改时间的文件名find
,然后仅选择较新的文件:
find -newer REFERENCE_FILE
...或直接时间戳(参见 date(1) DATE STRING)
find -newermt TIME_STAMP