什么决定目录大小?

Mac*_*ond 10 directory

我知道目录本身的大小与其中文件的大小不同。

我认为目录是其中的目录和文件的列表,因此目录的大小应该与其中的文件/目录的数量相关,由于块大小的限制,最小为 4096 字节。

但在我的系统中,我有许多填充良好的目录,有 4096 字节,而一些目录则相当少,大约有 10 兆字节。你能解释一下为什么会这样吗?

mur*_*uru 13

使用的文件系统以及该目录中任何时间点的最大实体数决定了大小。一旦为目录保留的默认大小用完,就会为目录分配更多空间。但是,当实体数量减少时,分配的空间不会自动释放。因此,如果某个目录有 1000 万个实体,那么即使删除了 9,999,999 个实体,它的大小仍将保持不变。这导致了像这篇 Unix & Linux post 中的有趣情况。

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072
Run Code Online (Sandbox Code Playgroud)

这不一定适用于其他文件系统。该ext{2,3,4}文件系统受到影响。NTFS 是,在较小程度上。tmpfs而 btrfs 不是。ZFS 相当保守,我得到2了第二个stat命令的输出。

有关的: