如何在第二次匹配后停止查找命令?

如何在第二次匹配后停止查找命令?

如何制作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' _ {} +

相关内容