gpt4 book ai didi

linux - 如何在一定数量的结果后停止查找

转载 作者:太空狗 更新时间:2023-10-29 12:01:43 25 4
gpt4 key购买 nike

我试图确定一个特定目录至少有 100 个文件,每个文件至少 1MB。搜索必须是递归的,因为有很多子目录。我迫不及待地想得到所有 >1Mb 文件的列表,因为该目录有数百万个文件,这会花费太长时间。

所以我希望下面的命令能够工作:

find -size +1M | head -n 100

我的目录中有很多超过 1Mb 的文件,因此 head 命令返回前 100 行的列表只需要几秒钟。但这需要更长的时间。

如果我运行 find -size +1M 会在很短的时间内得到很多结果。当它连续运行两次并且 FS 缓存是新鲜的时更是如此。

所以我想知道为什么 head 没有在找到前 100 个文件后立即返回。

另一方面,如果我省略“-size”参数,它工作得很好:

查找 |头-n 100

这会立即返回一个包含 100 个文件的列表。

我正在运行内核为 3.2.0-4-amd64 的 GNU/Linux Debian 7.4 (Wheezy)。文件系统是位于单个 RAID1 阵列上 LVM 卷之上的 ext4。它有 9638853 个已使用 inode (6%),容量为 2.7 Tb 和 682 Gb 空闲。

最佳答案

这就是管道的工作原理。它一直等到 find -size +1M 的输出填满管道缓冲区,然后将其通过管道传输到 head -n 100,所以您实际上是在等待 find 命令填充通常为 64 KB 的管道缓冲区。

当您省略 -size 参数时,结果很快就会出来,只是需要时间来打印您终端中的所有行,所以它被认为花费了更长的时间。

如果您单独运行 find -size +1M,需要很短的时间才能获得许多结果,但不是所有 结果。如果让它运行到完成,您会发现它也需要很长时间。

您可以使用stdbuf 修改特定命令的缓冲操作。例如,

stdbuf -oL -eL find -size +1M | head -n 10

将为您的命令对标准输出和标准错误进行行缓冲,结果应该会更快。

关于linux - 如何在一定数量的结果后停止查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com