带参数 exec
的 Linux 命令 find
可以很好地在文件/文件夹上执行命令,无论它们是否包含空格和特殊字符。例如:
find . -type f -exec md5sum {} \;
非常适合在目录树中的每个文件上运行md5sum
,但以随机顺序执行。 Find 不会对结果进行排序,并且需要通过管道进行 sort
以获得更易于理解的排序结果。但是,通过管道传输到 sort
消除了 exec
的优势。
这不起作用:
find . -type f | sort | md5sum
因为有些文件名包含空格和特殊字符。
也不起作用:
find . -type f | sort | sed 's/ /\\ /g' | md5sum
仍然无法识别文件名中包含空格。
我想我总是可以稍后对最终结果进行排序,但想知道是否有人知道通过在 find
中排序来避免额外步骤的简单方法?
最佳答案
使用 BSD 查找
-s
参数可用于请求字典排序顺序。
find . -s -type f -exec md5sum -- '{}' +
使用 GNU 查找
使用 NUL 分隔符可以明确地处理文件名。假设您有 GNU 工具:
find . -type f -print0 | sort -z | xargs -0 md5sum
关于Linux Shell 命令: Find. 如何在不使用管道的情况下排序和执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321995/