6

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

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

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

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

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

我更喜欢 Python 本机解决方案,但如果有任何其他建议,我将不胜感激。

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

4

2 回答 2

5

看起来你将不得不暴力破解它。文件名指向 inode。inode 本身不包含对文件名的引用。您也可以有多个指向同一个 inode 的硬链接(文件系统中的位置或文件名)。

您可以在此页面上查看inode 结构的元素。文件名不存在。

于 2013-09-14T22:11:00.067 回答
1

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

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

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

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

于 2013-09-14T22:19:14.443 回答