答案并不像选择文件系统那么简单。Sane文件系统很久以前就停止使用目录的线性列表,这意味着目录中的条目数不会影响文件访问时间...。
除非是这样。
实际上,无论输入多少条目,每个操作都保持快速高效,但是某些任务涉及越来越多的操作。显然,执行简单操作ls
需要花费很长时间,并且直到所有inode都已被读取和排序后,您才能看到任何东西。做ls -U
(未排序)有一点帮助,因为您可以看到它还没死,但并不能明显减少时间。不太明显的是,任何通配符扩展都必须检查每个文件名,而且在大多数情况下,似乎也必须读取整个inode。
简而言之:如果您可以肯定地确保任何应用程序(包括外壳程序访问)都不会使用任何Wildard,那么您可以得到巨大的目录而不会感到re悔。但是,如果代码中可能包含一些通配符,则最好将目录的每个条目保持在1000个以下。
编辑:
所有现代文件系统都为大型目录使用了良好的数据结构,因此即使在庞大的目录上,只需查找特定文件的索引节点的单个操作也将非常快。
但是,大多数应用程序不仅仅执行单操作。他们中的大多数将执行完整目录或通配符匹配。无论如何,这些都是缓慢的,因为它们涉及读取所有条目。
例如:假设您有一个目录,其中包含一百万个文件,分别通过“ foo-999999.txt”命名为“ foo-000000.txt”和一个“ natalieportman.jpeg”。这些将很快:
ls -l foo-123456.txt
open "foo-123456.txt"
delete "foo-123456.txt"
create "bar-000000.txt"
open "natalieportman.jpeg"
create "big_report.pdf"
这些会失败,但也会很快失败:
ls -l bar-654321.txt
open bar-654321.txt
delete bar-654321.txt
即使返回的结果很少,这些操作也会很慢;即使失败,也要在扫描所有条目后失败:
ls
ls foo-1234*.txt
delete *.jpeg
move natalie* /home/emptydir/
move *.tiff /home/seriousphotos/
homes/u/username, homes/j/joeblow,homes/s/somebody,...
?