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

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

这个问题与这个

我从事动画工作,动画会生成大量文件(+/- 1,000,000 个),通常存储在单个目录中。在 Mac Os X 上,有些错误会导致文件数量超过 +/-30,000 个,因此我过去常常将动画分成多个目录。

在 Ubuntu 上,单个目录可容纳的文件数量有限制吗?

答案1

Ubuntu 不限制目录的大小,它由文件系统强制执行。每个文件和目录都是一个所谓的 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。程序通常不会期望有如此大量的文件。

相关内容