当前位置: 首页>>技术教程>>正文


一个目录下可以有多少个文件?

, ,

问题描述

这个问题与 this one 相关。

我使用动画,它会生成通常存储在单个目录中的大量文件(+/- 1,000,000)。在 Mac Os X 上,一些错误产生了超过 +/-30,000 个文件,所以我曾经将动画分解到不同的目录中。

在 Ubuntu 上,单个目录可以容纳的文件数是否有限制?

最佳思路

Ubuntu 不限制目录的大小,它是由文件系统强加的。每个文件和目录都是一个 so-called inode。您可以使用 df -i 检查正在使用的 inode 数量,并可用于所有已挂载的文件系统。

我刚刚创建了 100 万和 1 个没有问题的文件,因为我的 ext4 主分区的 inode 限制为 50 GB (46 GiB) 已经足够大了。

我使用 shell 扩展来创建文件,并结合 touch 实用程序:

mkdir test
cd test
touch {0..300000}
touch {300000..600000}
touch {600000..900000}
touch {900000..1000000}

这将创建 1000001 个文件,可以使用 ls | wc -l 进行验证。为什么是 300000..600000 而不是 300001..600000 ?因为我懒得把那个 1 放在最后。

df -i 看起来像:

/dev/sda6            3055616 1133635 1921981   38% /home

现在删除测试文件( cd ..&&rm -f test 需要更长的时间,所以使用 rm 和文件名):

rm {0..300000}
rm {300000..600000}
rm {600000..900000}
rm {900000..1000000}
cd ..
rmdir f

删除文件后,正在使用的 inode 数量立即减少:

/dev/sda6            3055616  133634 2921982    5% /home

请注意,即使文件系统允许如此大量的文件,将如此大的文件存储在单个目录中也是一个可怕的想法。至少使用一些具有像 f/i/l/e/filename.ext 这样的结构的子目录。程序通常不希望有如此大量的文件。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12143.html,未经允许,请勿转载。