简单说下这几个文件的作用吧。

.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"
最后修改:2023 年 08 月 17 日
如果觉得我的文章对你有用,请随意赞赏