关于 .DS_Store 文件的一些事

Mac 系统的每个目录里有一些隐藏的特殊文件比如 _MACOSX 文件夹和.DS_Store 文件,其中DS_Store用于存储文件夹的自定义属性(详见维基百科相关词条http://zh.wikipedia.org/wiki/.DS_Store),由于记录了目录下所有文件信息,可能导致信息泄露的问题(比如不小心上传到网站目录下),也有好事者称之为安全漏洞,我个人觉得属于危言耸听。QQ20150322-2@2x

因此 BetterZip 这样的压缩软件在制作压缩包的时候提供了选项是否排除掉这些文件:

QQ20150322-3@2x

然而有时候直接整个文件夹复制或者全选复制的时候还是会不小心把这些文件复制到其他地方比如移动硬盘上,而这些文件在 Windows 下是可见的。

我就是不想在制作压缩文件和批量复制的时候把 _MACOSX 文件夹和.DS_Store 文件复制出去),因此开启了 Mac 的显示隐藏文件(方法如下)

defaults write com.apple.finder AppleShowAllFiles -bool true

然后就发现了一个蛋疼的问题:桌面上的 .DS_Store 也显示了,一个大大的白色图标在桌面上又毫无作用简直是逼死强迫症。

Wiki 说这文件作用是

“尽管这些文件本来是为Finder所使用,但它们被设想作为一种更通用的有关显示设置的元数据存储,诸如图标位置和视图设置”

看起来这文件作用还是有那么一点,本来我是不想删除的,但是这图标实在是有碍观瞻。

QQ20150322-1@2x于是乎我寻找了阻止这个文件生成的办法。

大部分网上说的所谓的阻止生成 .DS_Store 的方法是这样的:

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

然而我实测在10.9下并不好使,删了之后那可爱的文件还是自己蹦出来,其实仔细一看这命令之后就发现就这不靠谱了,名字都写的是NetworkStores啊!来自苹果这篇远古时期的技术支持文档https://support.apple.com/en-us/HT1629,这篇技术支持文档说的是这条命令能阻止 OS X 在远程生成这个文件(比如 FTP 和 SMB 的时候),而不是阻止本地生成,这以讹传讹还真是厉害啊 = =

继续寻找其他办法,联想到这个文件也作为 spotlight 的注释,尝试禁用了 spotlight(有 Alfred 之后 spotlight 就基本没用过,而且那玩意建立索引时的能耗真是很要命)

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
cd /System/Library/CoreServices/   
sudo mv Search.bundle/ Search2.bundle/  #去除状态栏图标
killall SystemUIServer

然而还是没有效果,那个可爱的文件还是变着花样蹦出来。

于是乎受http://rixstep.com/1/20030521,00.shtml启发,转向了第三方文件管理器,目前正在试用 Path finder,使用第三方文件管理器的桌面替代了 finder 的桌面之后看起来舒服多了(顺便吐槽 Finder 没有剪切功能简直反人类,换成第三方的正好解决了这个问题)= =

另外一劳永逸阻止.DS_Store文件生成有专门的工具叫做Asepsis(http://downloads-2.binaryage.com/Asepsis-1.5.dmg),安装之后重启即可阻止.DS_Store在任何目录生成(可能会影响到 Finder 的文件显示,但是都换第三方文件管理器了还怕这个么)


本文链接:https://www.starduster.me/2015/03/22/sth-about-ds_store/
本站基于 Creactive Commons BY-NC-SA 4.0 License 允许并欢迎您在注明来源和非商业使用前提下自由地对本文进行复制、分享或基于本文进行创作。
请注意:受限于笔者水平,本站内容可能存在主观臆断或事实错误,文中信息也可能因时间推移而不再准确,在此提醒读者结合自身判断谨慎地采纳。

3 条评论


  1. 受教,感谢!话说。。。我不小心把一个目录下这个文件推到github上了。。。。应该没有大问题吧

    回复

    1. 有一点,会泄露一些目录信息啥的,有CTF根据这个出题的,不过应该关系不大

      回复

      1. 好滴,感谢。搜了一招用,git reset –hard + git push –force,不知道是否彻底…

        回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据