HC4*_*ica 3 linux filesystems directory file ext3
我正在寻找一种快速的方法来查找Linux上目录中的文件数量.
任何在目录中的文件数量中占用线性时间的解决方案都是不可接受的(例如"ls | wc -l"和类似的东西),因为它需要花费相当长的时间(有数十亿甚至数亿目录中的文件).
我确定目录中的文件数必须作为一个简单的数字存储在文件系统结构的某个地方(也许是inode?),作为用于存储目录条目的数据结构的一部分 - 我该如何获得这个数字?
编辑:文件系统是ext3.如果没有可行的方法,我愿意做一些特定于ext3的事情.
数据结构为什么要包含数字?树不需要知道它在O(1)中的大小,除非它是一个要求(并且提供这个,可能需要更多的锁定和可能的性能瓶颈)
通过树我不是说包含subdir内容,而是包含-maxdepth 1的文件 - 假设它们并不真正存储为列表..
编辑:ext2将它们存储为链表.
现代ext3实现了散列B树
话虽如此,/ bin/ls比计数更多,并实际扫描所有inode.使用opendir()和readdir()编写自己的C程序或脚本.
从这里:
#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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2933 次 |
| 最近记录: |