如何制作find
命令,该命令将仅显示前两个匹配项,然后结束,类似于如何在第一次匹配后停止查找命令?只是两个记录的版本。
答案1
在链接的答案中替换1
为。2
find . ... -print | head -n 2
请注意,这做假设文件名是正常的,即它们不包含换行符。因此,它不是最适合脚本化解决方案。 (看为什么循环查找的输出是不好的做法?了解更多详细信息。)它仍然是迄今为止最适合快速交互使用的方法。
另请注意,在具有大量文件的系统上,这将比-exec sh -c 'echo "$1"; echo "$2"' _ {} +
方法更快,因为find
进程在完成后尝试写入更多文件名时将收到 SIGPIPE head
,然后find
结束。
更不用说-exec
如果有足够多的结果,该命令可能会打印 2 个以上的结果。例如,find / -exec sh -c 'echo "$1"; echo "$2"' _ {} +
不会在很长一段时间内退出,并且会打印每个 ARG_MAX 结果中的两个文件,而不是总共两个文件。
答案2
find
与调用一起使用sh
:
find . -type f -exec sh -c 'echo "$1" "$2"; done' _ {} +
这将扩展所有文件,因为使用+
终止符,-exec
然后我们只是打印第一个和第二个参数,它们是find
找到的第一个和第二个文件。
或者使用如下所示,您可以在找到多少个文件后指定(可能不是 2 个文件,而是 100 个文件!那么在上面您应该指定所有 100 个文件!)出口命令(实际上是 shell 发送exit
命令并导致find
退出其正在运行的进程)。
find -type f -exec sh -c '
for file; do echo "$file"; c=$((c+1)); [ $c = 2 ] && exit; done' _ {} +