macOS 清除 .DS_Store、__MACOSX、._* 垃圾文件

2021-05-11 • 更新于 2026-03-03

众所周知,macOS 会自作聪明地生成一些隐藏的垃圾文件,它们不仅烦人,还有泄露隐私的风险。

.DS_Store 是 Finder 自动生成的隐藏文件,__MACOSX 是 Finder 创建 zip 时生成的资源目录。._* 是资源分叉的独立文件,通常在不同文件系统之间复制文件时产生,可以用自带的 dot_clean 工具清除(看来苹果自己也知道这是垃圾文件啊)。

为此写了一个简单的脚本,需要的可以点击下载,或者通过 Homebrew 安装:

brew tap qianbinbin/tap
brew install qianbinbin/tap/clean-mac-dumbs

使用

$ clean-mac-dumbs --help
Usage: /usr/local/bin/clean-mac-dumbs [OPTION]... [FILE]...
Clean .DS_Store, __MACOSX and ._* files, recursively for directories.

With no FILE, clean current directory.

Options:
  -F, --fd                use sharkdp/fd for faster find if possible
  -n, --dry-run           perform a trial run with no changes made
      --no-recursion      do not clean recursively
  -h, --help              display this help
  -V, --version           display version

Home page: <https://qianbinbin.github.io/posts/cleaning-dumb-dotfiles-on-macos/>

直接运行 clean-mac-dumbs 会递归清理当前目录。

如果安装了 fd,可以使用 --fd 加速,比 find 命令快得多,但一条命令无法区分文件和文件夹(分成多条命令则加速效果不佳)。因此使用 fd 时,名为 .DS_Store 的文件夹和 __MACOSX 的普通文件也会被清理。

定时任务

要在 macOS 上设置定时任务,可以运行 crontab -e 并添加以下条目:

0 20 * * * export PATH=/usr/local/bin:$PATH:/usr/sbin; clean-mac-dumbs ~ >/usr/local/var/log/clean-mac-dumbs.log 2>&1

这里在每天 20:00 递归清理 HOME 目录。需要注意的是,如果 HOME 中挂载了其他存储,可能会造成清理过慢,此时可以手动指定多个路径以避开挂载目录。

cron 环境中 PATH 默认只有 /usr/bin:/bin,因此需要加上脚本路径和 dot_clean 路径 /usr/sbin。Silicon 芯片的系统可能需要把 /usr/local 改为 /opt/homebrew

macOSShell

本作品根据 署名-非商业性使用-相同方式共享 4.0 国际许可 进行授权。

Y 站、K 站下载器 moebooru-crawler

KMP 算法中的 next 数组