列出所有文件的 md5sum
listing md5sum for all files
我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些?
find -type f -name \* | xargs md5sum
尝试:
find . -type f -exec md5sum {} +
使用此命令,find
将 运行 md5sum
它找到的文件。
MacOS:根据MacOS find man page,find
上一个Mac不支持+
选项。相反,需要效率稍低的形式(见下面的注释 3):
find . -type f -exec md5sum {} \;
备注:
-name \*
告诉 find
搜索所有文件。由于这是默认值,因此无需指定。
现代文件名中包含空格是很常见的。事实上,他们的名字中甚至可以有换行符。因此,通常使用 xargs
是不安全的,除非使用 -0
或 --null
选项告诉它使用 NUL 分隔的输入。这可以与 find 的 -print0
结合使用,它告诉 find
生成 NUL 分隔的输出。但是,由于 -exec
可以完成 xargs
可以完成的大多数事情,并且可以安全地使用困难的文件名,因此通常首选 -exec
形式。
如果我们使用了 -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
我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些?
find -type f -name \* | xargs md5sum
尝试:
find . -type f -exec md5sum {} +
使用此命令,find
将 运行 md5sum
它找到的文件。
MacOS:根据MacOS find man page,find
上一个Mac不支持+
选项。相反,需要效率稍低的形式(见下面的注释 3):
find . -type f -exec md5sum {} \;
备注:
-name \*
告诉find
搜索所有文件。由于这是默认值,因此无需指定。现代文件名中包含空格是很常见的。事实上,他们的名字中甚至可以有换行符。因此,通常使用
xargs
是不安全的,除非使用-0
或--null
选项告诉它使用 NUL 分隔的输入。这可以与 find 的-print0
结合使用,它告诉find
生成 NUL 分隔的输出。但是,由于-exec
可以完成xargs
可以完成的大多数事情,并且可以安全地使用困难的文件名,因此通常首选-exec
形式。如果我们使用了
-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