带有参数find的Linux命令exec可以很好地执行文件/文件夹上的命令,无论它们是否包含空格和特殊字符。例如:

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 find-s参数可用于请求字典顺序。

find . -s -type f -exec md5sum -- '{}' +

使用GNU find
使用NUL分隔符可以明确处理文件名。假设您拥有GNU工具:
find . -type f -print0 | sort -z | xargs -0 md5sum

关于linux - Linux Shell命令: Find. How to Sort and Exec without using Pipes?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40321995/

10-16 03:20