来自 inode 的 Python 文件名



我正在转换OS X上的旧应用程序的文件。出于当时一定很好的原因,它通过索引节点编号将关联文件记录在其数据库中。(我认为苹果称之为FileID。

给定一个文件名,我可以使用os.stat()在Python中找到inode。但是有没有一种 Python 方法可以找到给定索引节点编号的名称?

如果做不到这一点,我可以想到另外两种方法:

  1. 扫描文件夹中的所有文件以收集其所有索引节点编号,并将它们保存在字典中以供快速参考。

  2. 使用 os.system('find/folder/folder -inum 1234') 并解析输出以获取我所追求的内容。我想这实际上与上述相同,但由操作系统完成。

我更喜欢Python原生解决方案,但如能提供任何其他建议,我将不胜感激。

这将是OS X 10.5或6上的Python2。

看起来你必须暴力破解它。文件名指向索引节点。索引节点本身不包含对文件名的引用。此外,您还可以有多个指向同一 inode 的硬链接(文件系统中的位置或文件名)。

您可以在此页面上看到索引节点结构的元素。文件名不存在。

OSX 上有volfs,但这实际上可能比你的 1. 方法慢。

因此,我会使用您的 1. 方法,但要考虑一些重要因素:

  • 一个inode可以指向多个files(硬链接)。
  • 您必须确保它仍然是同一设备。

您的 2. 方法与第一种方法基本相同,除了额外的分叉开销,更重要的是基本上一次又一次地运行相同的昂贵枚举,而不是一次填充映射。

最新更新