如何递归列出目录及其子目录中所有文件的 Md5sum?

Sum*_*ukh 23 command-line md5sum

我想列出(并保存)目录中所有文件的 Md5 校验和,并将该列表保存在名为的文本文件中 md5sum.txt

如果可以的话也很好

  • 将其集成到tree命令中(创建文件夹和文件的树结构)
  • 使其适用于文件夹和子文件夹(这很重要)

Zan*_*nna 43

您可以使用find(在目录中)

find -type f -exec md5sum '{}' \; > md5sum.txt
Run Code Online (Sandbox Code Playgroud)

如果要排除md5sum.txt文件本身,可以这样做:

find -type f \( -not -name "md5sum.txt" \) -exec md5sum '{}' \; > md5sum.txt
Run Code Online (Sandbox Code Playgroud)

您还可以使用循环:打开递归通配符

shopt -s globstar
Run Code Online (Sandbox Code Playgroud)

然后,在目录中:

for i in **; do [[ -f "$i" ]] && md5sum "$i" >> md5sum.txt; done
Run Code Online (Sandbox Code Playgroud)

您也可以从这个文件中排除文件本身:

for i in **; do 
  [[ -f "$i" ]] && 
  [[ md5sum.txt != "$i" ]] && 
  md5sum "$i" >> md5sum.txt
done
Run Code Online (Sandbox Code Playgroud)

这些都不会产生类似tree结构。但是他们确实从起始目录打印了文件的相对路径。如果你想要绝对路径,请使用find /path/to/directory ...

之后您可能想关闭 globstar ( shopt -u globstar)

  • 总是可以这样做:"> ../md5sum.txt" 以确保该文件不会包含在结果中 (3认同)
  • @Anwar 看到编辑有点麻烦的排除 ^_^ (2认同)