我使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹名称中包含空格。我该如何处理这些?
find -type f -name \* | xargs md5sum
Run Code Online (Sandbox Code Playgroud)
尝试:
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)
笔记:
-name \*告诉find我们搜索所有文件。由于这是默认值,因此无需指定它。
现代文件名中包含空格是很常见的。事实上,他们的名字中甚至可以有换行符。因此,除非使用或选项告诉它使用 NUL 分隔的输入,xargs否则通常使用起来不安全。这可以与 find 结合起来,后者告诉生成 NUL 分隔的输出。然而,由于它可以完成大多数可以做的事情,并且可以安全地使用困难的文件名,因此通常首选该形式。-0--null-print0find-execxargs-exec
如果我们使用表单-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)