如何从 python 读取、更改和写入 macOS 文件别名

lar*_*ryy 5 python macos alias file

有没有办法读取 macOS 文件别名,修改其内容(特别是目标文件路径),然后将修改后的别名写回?

例如,如果我有以下目录结构:

./one/file.txt
./two/file.txt
./file_alias
Run Code Online (Sandbox Code Playgroud)

其中file_alias解决./one/file.txt. 我希望能够在Python中以编程方式读取./file_alias、确定其路径、将“一”更改为“二”,然后写出修改后的别名,覆盖./file_alias. 完成后,file_alias将决心./two/file.txt

搜索我发现了一个相关问题的答案,表明它无法完成(@Milliway 对 [1] 的回答),一个没有实质性文档的 Carbon 模块,并且声明其功能已被删除 [2],一个部分弃用的 macostools 模块依赖于 Carbon [3],一个等效的、未解答的问题(除了使用 PyObjC 的暂定建议)[4],以及最近更新的 mac_alias 包 [5],但尚未找到完成任务的方法基于其中任何一个。

mac_alias 包起初看起来很有趣,但我发现无法导入Alias从现有别名文件构造内存中对象所需的字节(使用别名文件的二进制读取中的字节会产生错误),即使我可以构造内存中的Alias记录并对其进行修改,无法将其写入磁盘。

我想要的机器正在运行 10.12.x (Sierra),我正在使用内置的 python 2.7.10。我发现我实际上可以导入 Carbon 和 macostools,并且怀疑 Carbon.File 可能可以提供我需要的东西,但我找不到它的任何文档。我可以升级到 High Sierra 和/或安装和使用 Python 3.x,但这些在现阶段似乎没有帮助或相关。

我意识到别名还包含一个 inode,在这样的更改之后它将变得陈旧,但幸运的是,部分由于我提交的错误以及我在 Apple 工作时的一些持久性,别名首先解析路径,仅如果路径解析失败,则回退到 inode;如果路径解析成功(并且 inode 已更改),则更新 inode。

任何帮助、建议、指示表示赞赏。

[1]如何使用 os.walk() 在 Python 中处理 OSX 别名?
[2] https://docs.python.org/2/library/carbon.html
[3] https://docs.python.org/2/library/macostools.html
[4]更改别名目标 python
[5 ] https://pypi.python.org/pypi/mac_alias

Jon*_*sco 1

这个话题引起了我的兴趣...

但我认为这是不可能的。

查看 mac_alias 中的错误报告:https ://github.com/al45tair/mac_alias/issues/4

它指出该包处理别名记录而不是别名文件。Alias 文件是第三个版本,尚未经过逆向工程。

它指向别名文件上的此信息:http://indiestack.com/2017/05/resolving-modern-mac-alias-files/

还有他们旧的 bitbucket 上的这个线程:https://bitbucket.org/al45tair/mac_alias/issues/3/support-for-version-3-aliases

这指向这个死页面(谢谢,archive.org)https://web.archive.org/web/20170222235430/http://sysforensics.org/2016/08/mac-alias-data-objects/

以及可以通过此包读取一些信息的信息: https: //pypi.python.org/pypi/plistutils/,其中有一堆关于在其 github 上读取别名结构的文档

但这些都没有达到你想要的效果。对不起。