我尝试过
find /bin -type -f -exec md5sum {} + >>sum.md5
该/bin
目录包含多种文件类型,但上面仅返回常规文件的校验和。有什么办法可以找到吗全部文件in 和 under /bin
,运行md5sum
它们并验证校验和?
这是我想要实现的目标的细节。我们备份/bin
及其子目录,并将所有文件 md5sum 放入一个old.md5
文件中,将其压缩并上传到云端。例如,我的系统崩溃了,然后我/bin
从云端下载了目录并恢复,然后再次运行 md5sum 命令来生成new.md5
包含所有文件的哈希值的文件。现在我想比较new.md5
文件和old.md5
文件,以确保在下载或上传过程中文件没有发生任何更改。该脚本应该验证哈希值。
我需要一个完整的脚本。
答案1
要使用 查找所有非目录文件find
,请使用清除目录的测试:
find -H /bin ! -type d -exec md5sum {} + >sum.md5
这将md5sum
在尽可能多的文件上批量运行,包括符号链接,同时避免提供实用程序目录(这将使其发出警告)。
该-H
选项find
使其解析命令行上给出的任何符号链接,即/bin
(如果这是符号链接)。
要验证计算出的校验和,请使用md5sum -c sum.md5
。
答案2
您的命令已经下降到子目录(除非/bin
是链接,请参见下文),但它将跳过链接和其他非常规文件,因为您明确告知find
仅返回常规文件。就是这个-type f
意思。从man find
:
-type c
File is of type c:
f regular file
要找到所有内容,只需删除-type
:
find /bin/ -exec md5sum {} + >>sum.md5
请注意:/
末尾的/bin/
: ,以防您是符号链接(因为它通常是现代 Linux 系统上的/bin
符号链接)。/usr/bin
如果没有它,该命令将仅返回符号链接本身 ( /bin
) 并且不会下降到子目录。
如果您稍后想要验证这些校验和,只需运行:
md5sum -c sum.md5