带有参数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
内排序来避免这一额外步骤的简单方法?
答案 0 :(得分:3)
find
-s
参数可用于请求词法排序顺序。
find . -s -type f -exec md5sum -- '{}' +
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
结果之后开始的字符对结果进行排序,从而生成可读/排序的列表。