列出所有文件的 md5sum:使用 xargs 查找命令?

ihe*_*cpp 2 find md5sum

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

find -type f -name \* | xargs md5sum
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 5

尝试:

find . -type f -exec md5sum {} +
Run Code Online (Sandbox Code Playgroud)

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

MacOS:根据MacOS查找手册页find在Mac上不支持该+选项。相反,需要效率稍低的(见下面的注释 3)形式:

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

笔记:

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

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

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

例子

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

$ find . -type f -exec md5sum {} +
e75632e8a11db7513c2a9f25cb6c9627  ./file1
004dedba9b67f3a93924db548fd4d6ef  ./file2
48645402a2cf6ada3548ad69d8d906db  ./dir1/file1
6a182d8fe659c067897be7fde72903ea  ./dir1/file2
Run Code Online (Sandbox Code Playgroud)