众所周知,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。