Mac OS X 中对于目录中文件数量的限制有哪些?

Mac OS X 中对于目录中文件数量的限制有哪些?

我的 MacOS X 中的一个目录中有超过 100,000 个文件,看来我的脚本读取这些文件的速度很慢。

有没有什么限制或建议可以容纳这么多文件?我应该将它们分成几个目录吗?

我发现的局限性是无法处理mv * foo所有 100,000 个文件。它会显示错误,提示“参数太长”。它适用于大约少于 20,000 个文件。

答案1

根据这个 Stack Overflow 上的答案和具体苹果网站上的详细信息,单个文件夹最多可包含 21 亿个项目。

话虽如此,但它能够容纳多达 21 亿件物品并不意味着它能够保持这一水平的性能。根据维基百科;重点是我的:

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

因此,由于目录文件一次只能由一个程序使用,因此性能自然会下降。如果目录大小​​增加,该问题导致的风险/性能下降只会加剧;文件越多,程序访问该目录中文件的机会就越多。进一步此处确认了这个想法;我再次强调:

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

答案2

简短回答:好吧,如果您要读取 100,000 个文件,我可能预计脚本会很慢。

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

根据我的经验,它很像 Linux EXT 日志文件系统。它支持挂载目录、类似 UNIX 的权限等。它以 32 位格式处理文件,因此根据来源。

在现代系统中,文件系统开始崩溃,文件大小超过 8 EB,而一个位置的文件和文件夹多达 21 亿个,如下所述这里

考虑到 HFS+(或者实际上任何文件系统的设置方式)的设置方式,文件夹中有大量文件不应该发生任何“奇怪的”事情。

说实话,我认为将文件分布在更复杂的文件夹层次结构中不会提高性能。实际上,这种技术可能效率较低,因为您的脚本必须在过程中调用更改目录。

相关内容