find
在将输出传递给命令之前,我需要能够按字母顺序对输出进行排序。进入| sort |
之间不起作用,那么我该怎么办?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
答案1
像往常一样使用find
并用 NUL 分隔行。 GNUsort
可以使用 -z 开关处理这些:
find . -print0 | sort -z | xargs -r0 yourcommand
答案2
某些版本sort
有一个-z
选项,允许空终止记录。
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
此外,您还可以编写一个高级脚本来执行此操作:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
添加-r
选项以xargs
确保myCommand
使用参数调用它。
答案3
我认为你需要-n
排序标志#
按人排序:
-n, --numeric-sort
compare according to string numerical value
编辑
print0 可能与此有关,我刚刚测试了这一点。取出 print0 ,您可以使用-z
标志在排序中以 null 终止字符串
答案4
一些实现find
支持直接通过-s
参数进行有序遍历:
$ find -s . -name '*.json'
从FreeBSD找到手册页:
-s Cause find to traverse the file hierarchies in lexicographical
order, i.e., alphabetical order within each directory. Note:
`find -s' and `find | sort' may give different results.