Automator日历事件脚本问题:排除红色标签文件夹清理旧文件
我明白你遇到的问题了——Automator默认的查找动作没考虑到要排除红色标签文件夹里的所有内容,所以会误处理那些文件。下面给你两种解决方案,一种是纯Automator可视化配置,另一种是用Shell脚本更精准控制,你可以根据自己的偏好选择:
解决方案1:纯Automator动作调整(适合可视化操作)
这种方法通过给「Find Finder Items」添加多层条件,来排除红色标签文件夹内的内容:
- 打开Automator,新建日历提醒(这样就能设置每周五自动运行)。
- 添加「Find Finder Items」动作,设置搜索位置为你的
Documents文件夹。 - 配置查找条件(全部满足):
- 第一条:
修改日期→早于→当前日期减去30天(筛选出修改超过30天的文件) - 第二条:
容器→不具有标签→红色(排除直接位于红色标签文件夹下的文件) - 第三条:
容器的容器→不具有标签→红色(如果有嵌套的红色标签文件夹,需要再加这条,以此类推,不过这种方式只适用于固定层数的嵌套)
- 第一条:
- 接着添加「Move Finder Items To Trash」动作,完成流程。
⚠️ 注意:如果你的红色标签文件夹有多层嵌套(比如A文件夹是红色标签,里面还有B文件夹),这种方法可能无法完全排除,因为Automator只能指定固定层级的父文件夹,这时候更推荐用下面的Shell脚本方案。
解决方案2:Shell脚本(精准支持任意嵌套的红色标签文件夹)
用Shell脚本可以递归检查文件的所有父文件夹是否带有红色标签,彻底排除这类文件。步骤如下:
- 在Automator的日历提醒流程里,添加「Run Shell Script」动作,默认的Shell选择
/bin/zsh(macOS默认Shell)。 - 替换默认脚本为以下内容(注意:如果你的系统是英文,把脚本里的
红色换成Red):
# 目标文件夹:你的Documents目录 TARGET="$HOME/Documents" # 查找修改超过30天的文件,排除隐藏文件(可选,若要保留隐藏文件可删除下一行) find "$TARGET" -type f -mtime +30 -not -path "*/.*" \ -exec sh -c ' for file do # 递归检查所有父文件夹是否有红色标签 current_dir=$(dirname "$file") is_excluded=0 while [ "$current_dir" != "$TARGET" ]; do # 获取文件夹的标签属性 folder_tags=$(mdls -name kMDItemUserTags -raw "$current_dir") if echo "$folder_tags" | grep -q "红色"; then is_excluded=1 break fi current_dir=$(dirname "$current_dir") done # 检查直接父文件夹(避免漏过顶层红色标签文件夹) parent_tags=$(mdls -name kMDItemUserTags -raw "$(dirname "$file")") if echo "$parent_tags" | grep -q "红色"; then is_excluded=1 fi # 如果没有被排除,就移到废纸篓 if [ $is_excluded -eq 0 ]; then mv -v "$file" ~/.Trash/ fi done ' sh {} +
- 保存Automator流程,设置触发时间为每周五。
测试建议
为了避免误删文件,你可以先把脚本里的mv -v "$file" ~/.Trash/改成echo "将删除:$file",运行一次看看输出的文件列表是否符合预期,确认没问题后再改回mv命令。
内容的提问来源于stack exchange,提问作者dariasx1
相关产品推荐
相关产品推荐

