Linux Shell命令:查找。如何在不使用管道的情况下进行排序和执行?

时间:2016-10-29 17:59:33

标签: linux find

带有参数find的Linux命令exec在文件/文件夹上执行命令是一项伟大的工作,无论它们是否包含空格和特殊字符。例如:

find . -type f -exec md5sum {} \;

非常适合在目录树中的每个文件上运行md5sum,但是以随机顺序执行。查找不对结果进行排序,并且需要管道到sort以获得更易于阅读的排序结果。但是,sort的管道消除了exec的好处。

这不起作用:

find . -type f | sort | md5sum

因为某些文件名包含空格和特殊字符。

也不起作用:

find . -type f | sort | sed 's/ /\\ /g' | md5sum

仍然无法识别空格是文件名的一部分。

我想我总是可以随后对最终结果进行排序,但是想知道是否有人知道通过在find内排序来避免这一额外步骤的简单方法?

2 个答案:

答案 0 :(得分:3)

使用BSD find

-s参数可用于请求词法排序顺序。

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

使用GNU find

使用NUL分隔符允许明确处理文件名。假设你有GNU工具:

find . -type f -print0 | sort -z | xargs -0 md5sum

答案 1 :(得分:0)

找到了可行的解决方案

R> cppFunction("std::complex<double> doubleMeScalar(std::complex<double> x) { 
+                                                   return x+x; }")
R> doubleMeScalar(1+1i)
[1] 2+2i
R> 

通过比较在32个字符find . -type f -exec md5sum {} + | sort -k 1.33 结果之后开始的字符对结果进行排序,从而生成可读/排序的列表。