列出所有文件的 md5sum

listing md5sum for all files

我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些?

find -type f -name \* | xargs md5sum

尝试:

find . -type f -exec md5sum {} +

使用此命令,find 将 运行 md5sum 它找到的文件。

MacOS:根据MacOS find man pagefind上一个Mac不支持+ 选项。相反,需要效率稍低的形式(见下面的注释 3):

find . -type f -exec md5sum {} \;

备注:

  1. -name \* 告诉 find 搜索所有文件。由于这是默认值,因此无需指定。

  2. 现代文件名中包含空格是很常见的。事实上,他们的名字中甚至可以有换行符。因此,通常使用 xargs 是不安全的,除非使用 -0--null 选项告诉它使用 NUL 分隔的输入。这可以与 find 的 -print0 结合使用,它告诉 find 生成 NUL 分隔的输出。但是,由于 -exec 可以完成 xargs 可以完成的大多数事情,并且可以安全地使用困难的文件名,因此通常首选 -exec 形式。

  3. 如果我们使用了 -exec md5sum {} \; 的形式,那么 find 会为每个找到的文件 运行 md5sum 一次。相比之下,-exec md5sum {} + 形式将在命令行中放置许多文件名。这大大减少了必须启动的进程数。

例子

上述命令的示例输出如下所示:

$ find . -type f -exec md5sum {} +
e75632e8a11db7513c2a9f25cb6c9627  ./file1
004dedba9b67f3a93924db548fd4d6ef  ./file2
48645402a2cf6ada3548ad69d8d906db  ./dir1/file1
6a182d8fe659c067897be7fde72903ea  ./dir1/file2

find可以直接补xargs,避免使用|使用 -exec 标志的命令。在此语法中,您使用 {} 表示找到的文件的名称,+ 表示命令结束。

因此您应该能够运行这个命令来获得您想要的结果:

find -type f -exec md5sum "{}" +

如果你真的想使用管道,那么你需要告诉 find 用 null 和 xargs 来分隔响应以期望像这样的 null 分隔参数:

find -type f -print0 |xargs -0 md5sum