gpt4 book ai didi

linux - 在 Linux 上查找一个目录中的文件数的快速方法

转载 作者:IT王子 更新时间:2023-10-29 00:59:19 25 4
gpt4 key购买 nike

我正在寻找一种快速查找 Linux 目录中文件数的方法。

任何在目录中的文件数量上花费线性时间的解决方案都是 Not Acceptable (例如“ls | wc -l”和类似的东西),因为它会花费非常长的时间(有几十个甚至数百个目录中的数百万个文件)。

我确信目录中的文件数量必须作为一个简单的数字存储在文件系统结构中的某处(也许是 inode?),作为用于存储目录条目的数据结构的一部分 - 我怎样才能到达这个数字?

编辑:文件系统是 ext3。如果没有可移植的方法来执行此操作,我愿意做一些特定于 ext3 的事情。

最佳答案

为什么数据结构要包含数字?一棵树不需要知道它在 O(1) 中的大小,除非它是一个要求(并且提供它,可能需要更多的锁定并且可能是性能瓶颈)

我所说的树并不是指包含子目录内容,而是包含 -maxdepth 1 的文件——假设它们实际上并未存储为列表..

编辑:ext2 将它们存储为链表。

现代 ext3 实现 hashed B-Trees

话虽如此,/bin/ls 做的不仅仅是计数,而且实际上扫描了所有 inode。使用 opendir() 和 readdir() 编写您自己的 C 程序或脚本。

来自 here :

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main()
{
int count;
struct DIR *d;
if( (d = opendir(".")) != NULL)
{
for(count = 0; readdir(d) != NULL; count++);
closedir(d);
}
printf("\n %d", count);
return 0;
}

关于linux - 在 Linux 上查找一个目录中的文件数的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3283582/

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