我正在转换OS X上的旧应用程序的文件。出于当时一定很好的原因,它通过索引节点编号将关联文件记录在其数据库中。(我认为苹果称之为FileID。
给定一个文件名,我可以使用os.stat()在Python中找到inode。但是有没有一种 Python 方法可以找到给定索引节点编号的名称?
如果做不到这一点,我可以想到另外两种方法:
-
扫描文件夹中的所有文件以收集其所有索引节点编号,并将它们保存在字典中以供快速参考。
-
使用 os.system('find/folder/folder -inum 1234') 并解析输出以获取我所追求的内容。我想这实际上与上述相同,但由操作系统完成。
我更喜欢Python原生解决方案,但如能提供任何其他建议,我将不胜感激。
这将是OS X 10.5或6上的Python2。
看起来你必须暴力破解它。文件名指向索引节点。索引节点本身不包含对文件名的引用。此外,您还可以有多个指向同一 inode 的硬链接(文件系统中的位置或文件名)。
您可以在此页面上看到索引节点结构的元素。文件名不存在。
OSX 上有volfs
,但这实际上可能比你的 1. 方法慢。
因此,我会使用您的 1. 方法,但要考虑一些重要因素:
- 一个
inode
可以指向多个files
(硬链接)。 - 您必须确保它仍然是同一设备。
您的 2. 方法与第一种方法基本相同,除了额外的分叉开销,更重要的是基本上一次又一次地运行相同的昂贵枚举,而不是一次填充映射。