在Mac OS X的目录中有许多文件有什么限制?


9

我的MacOS X的目录中有100,000多个文件,并且看来我的脚本读取其中的文件很慢。

有那么多文件是否有任何限制或建议?我应该将它们拆分到一些目录吗?

我发现的局限性是我不能mv * foo全部存储100,000个文件。它显示一个错误,说“参数太长”。它可以处理大约少于20,000个文件。


目前,我在目录中有380,000个文件,并且意识到即使打开一个文件也只需要10秒钟以上。我决定将它们分离到某些目录。
Daisuki Honey 2014年

1
HFS +文件系统应该能够以全名存储和访问目录中的大量文件,而不会造成太大麻烦。但是您需要提防通配符。当您使用命令参数*或将其?作为命令参数的一部分时,操作系统会在整个目录中搜索匹配文件(慢速),然后用每个匹配文件的列表(长整数)替换您的参数,然后将其传递给命令。使用循环或几个mv命令(例如)可能会做得更好mv a* foo && mv b* foo
马提亚斯·弗里普

Answers:


1

根据此Stack Overflow答案以及Apple网站上的特定详细信息,单个文件夹最多可以包含21亿个项目。

就是说,仅因为它可以容纳21亿个项目,并不意味着它可以将性能维持在该水平。根据维基百科 ; 重点是我的:

目录文件将所有文件和目录记录存储在一个数据结构中,当系统允许多任务处理时会导致性能问题,因为一次只能有一个程序写入该结构,这意味着许多程序可能正在排队等待由于一个程序“占用”了系统。这也是一个严重的可靠性问题,因为对该文件的损坏可能会破坏整个文件系统。

由于目录文件一次只能由一个程序使用,因此性能自然会降低。如果目录的大小增加,则由该问题引起的风险/降级只会逐步升级;更多文件意味着程序有更多机会访问该目录中的文件。在这里进一步确认这个想法 ; 再次强调是我的:

目录文件是一个复杂的结构。因为它保留所有文件和目录信息,所以它会强制文件系统进行序列化,这在有大量线程想要执行文件I / O时不是理想的情况。在HFS中,任何以任何方式创建文件或修改文件的操作都必须锁定目录文件,这会阻止其他线程甚至以只读方式访问目录文件。对目录文件的访问必须是单作者/多读者。


非常感谢。我知道对目录文件的访问将成为瓶颈,并且可能导致严重的性能问题,尤其是对于多任务处理。
Daisuki Honey 2014年

@DaisukiHoney不客气!因此,如果您发现我的答案有帮助,请记得对其进行投票。如果是解决您问题的答案,请记住将其选中。
JakeGould 2014年

是的,绝对是我对您的答案进行投票,然后将其选中。再次,非常感谢。
Daisuki Honey 2014年

您引用Wikipedia部分谈论的是每个文件系统而不是每个目录的可伸缩性限制:每个文件系统只有一个目录文件,所有访问都必须在此序列化。这与这个问题无关。
poolie

@poolie问题是关于文件系统上存在的每个目录。目录文件按文件系统存在,但目录本身也存在于同一文件系统上。它与一个文件系统中存在的一个目录中的10,000多个文件有关的问题有关。但是这个问题已经2年多了,所以谢谢您的Wiki链接。我已经更新了答案,以包括新的措辞以及指向相关部分的直接链接。
JakeGould '16

4

简短的回答:好吧,如果您正在读取100,000个文件,我可能希望脚本运行缓慢。

长答案:要更彻底地回答此问题,您必须查看Mac上的文件系统。Mac使用HFS +(分层文件系统Plus),这是一种现代文件系统,具有限制,但仅限于极端情况下使用。

根据我的经验,它很像Linux EXT日记文件系统。它支持安装目录,UNIX类的权限,等等。处理的文件在一个32位格式,使得其可被存储在一个卷4294967295文件的最大数,根据源。

在现代系统中,文件系统开始出现大于8 EB的文件中断,此处概述的一个位置最多包含21亿个文件和文件夹。

考虑到HFS +的设置方式(实际上就是为此设置的任何文件系统),在文件夹中包含很多文件都不应做任何“怪异”的事情。

老实说,我认为将文件分布在更复杂的文件夹层次结构中不会带来性能改善。实际上,此技术的效率可能较低,因为您的脚本将不得不在过程中进行更改目录的调用。


对。我曾考虑过更改目录层次结构,但这会导致算法更加复杂,并且我怀疑性能会有很大提高。感谢您的回答。我目前在目录中有200,000个文件,最后可能有1,000,000。我希望它在没有不良性能的情况下能正常工作。
Daisuki Honey 2014年

@DaisukiHoney如果您正在使用那么多文件,那么看看是否可以将它们细分为目录可能是值得的。在此阶段可能很难做到,但可能会使事情变得更稳定。
JakeGould 2014年

@JakeGould感谢您的建议。我一直在考虑进行重组,因为我可能会添加更多文件。谢谢。
Daisuki Honey 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.