简单说下这几个文件的作用吧。
.DS_Store是Finder产生的文件,主要是记录Finder保存的信息,比如窗口大小位置和图标位置,以及目录中的文件等。通过命令只能禁止在网络驱动器中产生,本地和外置存储照样会产生。
._文件是元数据。HFS/APFS里额外的元数据通过._开头的文件保存在非Mac格式的卷中,比如颜色标签等信息。上古时期Mac OS的resource fork数据,在非Mac格式的卷中也保存在那些文件里。如果你不需要保存resource fork中的数据,那._文件是可以安全删除的。
_MACOSX文件夹存在于压缩文件中,也是元数据信息,在macOS上不可见,只在非macOS系统上可见,因为在这些系统上,这些文件被视为无效文件。
禁止生成.DS_Store
可以通过命令行,禁止在网络存储器上生成.DS_Store文件,这对本地和外置存储例如移动硬盘等无效。
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
对于本地存储一般不需要处理,主要是外置存储在别的系统上使用时会造成困扰。
我的方法是在弹出外置存储的时候,通过命令删除掉这些文件。
find /Volumes/MyPassport -type f -name .DS_Store -delete
._文件清理
这个文件在HFS/APFS拷贝到其他文件系统的时候会生成,只能通过手动删除。
find /Volumes/MyPassport -type f -name '._*' -delete
_MACOSX目录清理
zip -d file.zip '__MACOSX/**'
整合清理脚本
将上述所有macOS生成的文件清理整合到一个脚本中,方便调用。
编写脚本,放到PATH目录中。
vim /usr/local/bin/clean_macdot
内容如下:
#!/bin/bash
# Description: Clean all macOS dot files, include ._*, .DS_Store
# Author: Yezzi Hsueh <xueye404@foxmail.com>
# Create: 2023-08-17 13:37
# envs
if [ -z "$1" ]; then
CLEAN_DIR=`pwd`
else
CLEAN_DIR=`realpath $1`
fi
# start clean process
echo "Cleanning dot files in $CLEAN_DIR"
find $CLEAN_DIR -type f -name '._*' -exec echo "deleting: {}" \; -delete
find $CLEAN_DIR -type f -name '.DS_Store' -exec echo "deleting: {}" \; -delete
find $CLEAN_DIR -type f -name '*.zip' -exec sh -c "unzip -l {} | grep '__MACOSX/' | awk '{print \$4}' |xargs zip -d {}" \;
echo "Done"