Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mac 上的 .DS_Store 究竟是什么文件?如何删除? - 知乎 #92

Open
HenryTSZ opened this issue Dec 10, 2023 · 0 comments
Open

Comments

@HenryTSZ
Copy link
Owner

前两天,小伙伴准备发个图片素材压缩包给我。

当她用软件浏览压缩包,确认内容是否正确时,发现了一个未曾见过的神秘文件”.DS_Store“。

此文件名前缀带了”.“,据此推测这应该是一个隐藏文件。

在「访达」里显示一个隐藏文件不是难题,于是她同时按住快捷键 ”Command+Shift+。“,成功显示隐藏文件。但是,依然看不见这个文件!

那么,这个神秘的文件”.DS_Store“究竟是何方神圣?

为什么苹果要极力隐藏它,即使在”显示隐藏文件“模式下依然不可见?

让我们继续往下看。

.DS_Store 文件究竟是什么?

DS_Store,英文全称是 Desktop Services Store(桌面服务存储),开头的 DS 是 Desktop Services(桌面服务) 的缩写。它是一种由macOS系统自动创建的隐藏文件,存在于每一个用「访达」打开过的文件夹下面。

虽然不能在「访达」中直接看到它,但是通过「终端」App,可以输入`ls -la`命令列出。同时,通过`file`命令,可以显示出其文件类型,即”Desktop Services Store“。

「终端」可以看到.DS_Store文件

DS_Store 文件的主要作用,是存储当前文件夹在桌面显示相关方面的一些自定义属性,包括文件图标的位置、文件夹上次打开时窗口的大小、展现形式和位置等。这有助于保留为特定文件夹配置的设置,例如,将桌面文件夹设置为查看按名称排序的图标,同时将下载文件夹配置为将文件显示为列表并按日期排序,最近修改的先显示。

后来,苹果又往里面加入了一些和文件注释相关的自定义信息。(这部分注释信息在最新的macOS中,同时被存储在文件自身的扩展文件属性中,这里仅作为了备份)

使用Hex Fiend查看.DS_Store文件里面存储了和右击文件「显示简介」中我写的注释一样的内容

DS_Store 文件被苹果作为底层数据隐藏在系统中,不期望用户接触到。它存储的元数据仅仅被「访达」用于文件夹的自定义显示。它不会占用太多的存储空间,所以不用过于担心。

能否阻止 DS_Store 文件的自动生成?

DS_Store 文件是由系统自动创建的,它的存在有时候会对某些场景下的用户体验产生一些负面的影响。

为了加快网络磁盘的浏览速度,苹果提供了针对通过SMB共享的网络磁盘上DS_Store文件的阻止生成方案

1. 在「访达」中打开「应用程序」 > 「实用工具」 > 「终端」。

2. 输入以下命令:

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

3. 然后退出登录 macOS 账户并重新登录。

要重新启用,请输入以下命令:

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool FALSE

但是,以上命令只是针对网络磁盘,想要阻止本地磁盘中 DS_Store 文件的自动生成?

唯一的方式就是停止使用「访达」,不过我想大家应该不会考虑这么做。

何时要删除 DS_Store 文件?

既然 DS_Store 文件不会占用太大的磁盘空间,又对文件夹的显示有帮助,那为什么我们有时候还要删除它呢?下面是一些可能的原因:

  1. 你想要重置「访达」中文件夹自定义显示的方式,或者由于原有 DS_Store 文件损坏造成「访达」访问文件夹出现无法调整视图样式、无法查看或排序图标等错误。
  2. 当你在 macOS 与电脑之间拷贝或传输文件的时候,DS_Store 文件会默认被包含在内,可能会引起一些不必要的问题。而且,由于其他PC操作系统或软件不认识这个文件,在传输文件时,DS_Store 文件会显现出来,正如文章开头小伙伴给我发压缩包时,因为不熟悉 macOS 系统中这个文件是什么而出现疑虑。

如何删除 DS_Store 文件?

首先,要声明的一点是,删除 DS_Store 文件完全是安全的操作,它不会损害电脑,也不会造成个人数据丢失。删除后,「访达」在打开文件夹是会以默认显示模式显示文件夹。在你进行某些「访达」操作后,系统又会在后台自动创建 DS_Store 文件。

如果你想删除 DS_Store 文件,可以通过「终端」App 进行删除。

  1. 在「访达」中打开「应用程序」> 「实用工具」 > 「终端」。
  2. 定位到你要删除 .DS_Store 文件的文件夹目录下。
  3. 在「终端」里输入`cd`命令,跟上你的目录文件夹路径,例如: `cd /Users/username/pictures`。
  4. 回车。
  5. 输入命令 `find . -name '.DS_Store' -type f -delete`。
  6. 再次回车。

到这里,当前文件夹目录下的所有 .DS_Store 文件都会消失。

某些情况下的 DS_Store 文件忽略方案

删除操作有些麻烦,而且有时候在某些情况下,我们并不一定要通过删除才能解决 DS_Store 文件带来的问题。

在我平时的工作中,经常遇到的情况就有两种:

  1. 在压缩文件夹时不想把 DS_Store 文件带进压缩包。
  2. 在使用版本控制Git管理代码仓库文件夹时,不想把 DS_Store 文件带入仓库。

(如果有同学有其他情况下的解决方案,欢迎留下评论。)

下面我就介绍一下,如果在不删除 DS_Store 文件的条件下,解决上面两种情况下的需求:

使用某些第三方压缩软件压缩文件夹

这里我使用一款叫做 Keka 的解压缩软件,在它的偏好设置中,勾选“排除 Mac 资源文件(例如:.DS_Store)”。

然后,使用它来压缩文件夹时,它会自动忽略 DS_Store 文件。再次浏览压缩后的压缩包,再也看不到 DS_Store 文件了。

Git仓库管理忽略 DS_Store 文件

作为一名使用Mac的开发者,在日常开发过程中,经常会使用Git来对代码文件夹进行版本控制。而在默认情况下,Git会把 DS_Store 文件带入版本控制的范围内。所以,可以手动将其踏入 Git 的版本管理忽略列表。

1. 将 . DS_Store 加入全局的 .gitignore 文件,执行命令:

echo .DS_Store >> ~/.gitignore_global

2. 将这个全局的 .gitignore 文件加入Git的全局config文件中,执行命令:

git config --global core.excludesfile ~/.gitignore_global

哦了,. DS_Store 再也不会出现在你项目的Git代码仓库中了!

总结

  1. DS_Store 是系统自动创建的,存储「访达」打开文件夹时自动显示方式的首选项,以便文件夹以创建者预期的方式显示。
  2. 苹果没有提供完全阻止本地磁盘生成 DS_Store 文件的办法。
  3. 可以通过「终端」里输入命令行的方式删除它,不会造成任何电脑损害。但是删除后,只要继续使用「访达」,它有会在背后默默自动创建,所以无法也没必要”赶尽杀绝“。
  4. 在压缩文件或Git版本管理中,可以通过第三方软件Keka或修改Git配置项来自动忽略 DS_Store 文件。
  5. 最后,期望苹果在将来的系统更新中,能够更换这类文件数据的存储方式,不要再自动给用户的目录添加看不到的文件了。
我是 Jim Ye,
如果你喜欢这篇文章,欢迎三连(点赞+收藏+关注),感谢支持!
如果你有任何想法,欢迎留言。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant