我所看到的。ds_store文件的所有描述都说。ds_store文件是由Finder在查看目录时创建的。在最近的macOS版本中(我运行的是macOS 12.4),我遇到过这样的情况:. ds_store文件创建在Finder中从未查看过的目录中。
我在构建软件项目时发现了这个问题。执行干净的构建通常从删除构建输出文件树开始,使用rm -rf
或等效的工具。在这一步中,我开始偶尔遇到失败,报告的错误是试图删除一个非空目录。检查该目录将显示一个. ds_store文件。
仔细看,问题不是没有删除。ds_store文件;我可以把它从壳层中删除。另一种解释是. ds_store文件在被删除后被重新创建。如果在调用删除目录之前发生这种情况,则删除目录将失败。
我能够在包含.DS_Store文件的文件树上使用shell命令测试这一点,使用如下语句:find . -name .DS_Store -print
find . -name .DS_Store -exec rm {} ;
find . -name .DS_Store -print
最后一条语句不应该打印任何文件,但通常它打印的文件数量是第一条语句的一半。在某些情况下,它打印了第一个语句没有打印的文件,清楚地显示正在创建. ds_store文件。
我的理论是,一些程序正在使用文件系统事件来监视文件系统的变化,它正在做一些事情,导致. ds_store文件被创建。我想知道是否存在读取文件元数据导致. ds_store文件被创建(作为缓存)的情况。我怀疑是备份程序触发了这个问题,因为它监视文件系统的更改并读取大量的文件元数据。
我的问题是:
- 有没有人知道macOS API可以创建。ds_store文件? 谁能建议一种方法来跟踪正在创建。ds_store文件的代码?
只是为了清楚,我是不是要求的方法来抑制创建。ds_store文件的Finder,我是不是要求的方法来隐藏。ds_store文件。(我知道这些都是热门话题。)
@Sagar,谢谢你的建议。这有助于证实我已经想到的一个解释。答案是Finder在已启用了"计算所有大小"选项的查看目录中包含的目录中创建. ds_store文件,可能是作为缓存,并且为了保持显示的总大小是最新的,它会根据FSEvents重新计算和更新. ds_store文件。