我打算开发一个跨平台的脚本。在Linux和其他操作系统上,它将在XDG_CONFIG_HOME
中存储XDG_DATA_HOME
中的配置和数据文件(特别是下载的插件)。在Windows上,它将使用APPDATA
(除非有人有更好的主意)。但是,在Mac OS X上做什么是正确的?
在我第一眼浏览一个方便的Macbook的~/Library
目录时,我看到了Preferences
和Application Support
文件夹。我原本打算使用那些,但Preferences
似乎只包含反向域名的plists,如com.apple.foo.bar.baz.plist
,Application Support
中的每个文件夹对应/Applications
中的一个包,所以我不确定系统对文件的反应有多好不符合它的标准。将它们直接存储在~/Library
可能是一种选择,但我不想用流浪的myscript.conf
文件污染它,如果它有一个更好的地方。
我应该在哪里存储这些文件? (请不要只说~/.myscript
。我知道这是Unix的传统,但是在主目录中看到随机的dotfiles让我感到很恼火。)
我会用~/Library/Application Support/script_name/
。 Application Support
中的子目录通常由各种应用程序使用,包括Apple自己的软件。但它并没有被操作系统强制执行,也没有与/Applications
内部的应用相关联。因此,您可以完全自由地在其中创建自己的目录。
有关OS X的目录结构,请参阅this Apple document。
将Apple的各种路径文档与XDG Base Directory规范进行比较,大致可以看到以下位置:
XDG_CONFIG_HOME
~/Library/Preferences/
XDG_DATA_HOME
~/Library/
XDG_CACHE_HOME
~/Library/Caches/
在Mac OS X上映射“我的应用程序”的XDG基本目录规范位置可能如下所示:
XDG_CONFIG_HOME
~/Library/Preferences/name.often.with.domain.myapp.plist
XDG_DATA_HOME
~/Library/My App/
XDG_CACHE_HOME
~/Library/Caches/My App/
这些映射似乎很合理,但它们并不精确。某些类型的缓存或数据可能适用于~/Library/Application Support/My App
,而其他类型的缓存或数据可能在临时位置或应用程序包中最佳。所有这些都是按照惯例,使用最佳XDG_
位置的相同原因适用于使用Mac OS X系统上的最佳位置。
您对~/.myscript
的烦恼符合Apple的指导方针:“不要污染用户空间”。
参考文献:
我同意OJFord's comment:如果您正在编写脚本,只需按照XDG Base Directory更好。
理由:
XDG_CONFIG_HOME
中的名字通常是小型的名字,如git
; ~/Library/Preferences/
中的那些通常使用com.apple.foo-bar
这样的反向域名,或者像Foo Bar
这样的首字母大写空格分隔名称。/Applications
中时遵循macOS约定。你不要把你的脚本放在/Applications
;你把它们放在UNIX-specific directorys。最好保持一致。~/Library/Preferences/
充满了.plist
s。我知道没有跨平台脚本使用属性列表。例如,Git将其配置文件放在XDG_CONFIG_HOME/git/config
中,而不是放在~/Library/Preferences/Git/config
中。我感觉合理。
我只对配置文件($XDG_CONFIG_HOME
)和数据文件($XDG_DATA_HOME
)提出了意见;对于缓存文件,它变得微妙。根据How-To Geek,~/Library/Caches
目录默认排除在Time Machine之外。我不关心缓存文件夹,因为我无论如何都备份了这两个目录。