天天看点

如何禁止 Mac OS X 在外接设备上生成 .DS_Store 文件?以及如何批量删除 .DS_Store 文件?

如何禁止 mac os x 在外接设备上生成 .ds_store 文件?以及如何批量删除 .ds_store 文件? 

背景信息 

.ds_store文件(desktop services store)是一个隐藏的文件,在每一个目录下都有,它存放着这个文件目录的一些特定属性信息 metadata,比如图标大小、位置、背景图片等属性;有点儿类似于 windows 操作系统上的 thumbs.db 、desktop.ini 文件。 

如果在 mac os x 没有打开隐藏文件进行显示的话,就在 finder 中看不到这个 .ds_store 文件,不会觉得碍事。但是通常在与其他机器或usb文件交换到其他操作系统时,如在windows操作系统下,同样也打开显示隐藏文件时,这时就会对这些隐藏文件感觉到特别的多余,以及占用空间之类的XYZ;以及对文件进行压缩时,会包含在压缩文件里之类的不爽,对外接设备或smb、afp远程网络连接之类的。 

解决方法 

进入terminal,然后执行 defaults write com.apple.desktopservices dsdontwritenetworkstores true ,然后注销再登录或直接重启 mac os x; 

机器上有多个用户,则所有用户都如此操作一次;或者将新生成的 com.apple.desktopservices.plist 文件拷贝到各个用户的 ~/library/preferences 目录下即可。 

虽然这个方法可以禁止 mac os x 在外接设备上面再次生成 .ds_store 文件,但是目前已经存在的文件却无法通过帮你也直接删除,只能手工埋批量删除之,执行如下命令即可: 

find / -name ".ds_store" -type f -delete 

但是以上命令仍无法禁止在本机文件系统上生成 .ds_store 文件!!! 

实现原理 

mac os x实现了一个私有的系统框架 desktopservicespriv,这个框架负责创建和操作 .ds_store 文件,finder 以及其他的应用程序也使用这个框架,desktopservicespriv 使>用标准的 libc 调用来操作 .ds_store 文件,于是通过对 desktopservicespri 进行封装,在创建和操作 .ds_store 文件时,加上指定的目录作为前缀,即可将在每一个目录下>创建一个 .ds_store 文件的操作重定向到某一个特定的目录中去了。 

文件目录需要简洁,这样世界才清静啊! 

相关参考资料链接: 

<a target="_blank" href="http://support.apple.com/kb/ht1629">http://support.apple.com/kb/ht1629</a>

继续阅读