带有参数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/