【发布时间】:2011-03-18 01:11:16
【问题描述】:
我正在寻找一种快速查找 Linux 目录中文件数量的方法。
任何在目录中的文件数量上花费线性时间的解决方案都是不可接受的(例如“ls | wc -l”和类似的东西),因为它会花费非常长的时间(有几十甚至几百目录中的数百万个文件)。
我确定目录中的文件数必须作为一个简单的数字存储在文件系统结构中的某个位置(可能是 inode?),作为用于存储目录条目的数据结构的一部分 - 我怎样才能得到这个号码?
编辑:文件系统是 ext3。如果没有可移植的方式来做到这一点,我愿意做一些特定于 ext3 的事情。
【问题讨论】:
-
几乎重复:stackoverflow.com/questions/1427032/…,谈如何加速标准ls | wc-l
-
我不认为这是以纯数字形式存储的。(虽然我没有阅读规范)。仅仅因为它会减慢 FS,您需要同步 touch/unlink/mv 等以获得可靠的结果,同样在崩溃的情况下,数字可能已损坏,因此您需要在某个时候重新计算文件.另外,至少在我的 Ubuntu Nautilus 上,它会自行缓存目录中的对象数量,如果底层 FS 中有一个数字,我认为它不会这样做。
-
我想知道...目录条目的大小(即当您在其父目录中执行 ls -l 时看到的目录大小)与条目数有关吗?这个目录看起来确实比平时大。
-
目录的大小可以与曾经存储在其中的最大文件数相关联。在某种程度上,目录是一个包含稀疏数组的普通文件,其中包含指向实际文件的指针。
-
“数以亿计的文件”是一个病态的案例。目录中的大量文件确实会影响性能;这就是为什么
/usr/share/terminfo为条目使用的每个初始字符都有一个子目录,因此它可以像树一样被遍历以保持文件倒计时。有些文件系统更类似于数据库,其中计数归结为单个快速查询,但这些在 Unix 世界中并不常见(如果它们存在,IDK)。
标签: linux file directory filesystems ext3