You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现按下划线分隔匹配规则删除目录内非保留列表的文件

批量删除非匹配规则文件的实现方案

核心匹配规则对齐

严格按照要求的分隔逻辑判断保留/删除:

  • 仅当文件名以保留列表中的某一项为前缀,且该前缀后紧跟英文下划线时,判定为需要保留的文件
  • 举例:列表项1只会匹配1_开头的所有文件,不会误匹配11_、12_等数字前缀更长的文件,和示例的判定结果完全对齐

执行前置操作(必做,防止误删)

  • 确认两个核心路径:待清理的目标目录、保存保留列表的keep_list.txt文件路径
  • 先通过预览命令输出所有待删除文件的清单,逐行核对没有遗漏需要保留的文件后,再执行实际删除操作

预览待删除文件清单(不做实际删除)

把下面命令里的两个路径替换成你自己的实际路径后,执行即可输出所有符合删除条件的文件:

# 替换为实际路径
TARGET_DIR="/你的目标目录绝对路径"
KEEP_LIST="/你的keep_list.txt文件绝对路径"

find "$TARGET_DIR" -maxdepth 1 -type f | while read -r file; do
  filename=$(basename "$file")
  # 拼接保留列表的匹配规则:列表项后必须紧跟下划线
  match_rule="^$(tr '\n' '|' < "$KEEP_LIST" | sed 's/|$//')_"
  if ! grep -qE "$match_rule" <<< "$filename"; then
    echo "待删除文件: $file"
  fi
done

执行后的输出会和题目示例的判定完全一致:

  • 被标记为待删除的文件:2_c.gif、2_d.gif、2_.jpeg、23_.jpeg、4445_123.jpeg
  • 不在待删除列表、即会被保留的文件:1_a.gif、1_b.gif、1_.jpeg、22_.jpeg、333_abc.gif

正式执行批量删除

等预览清单核对无误后,将上面的判断逻辑替换为实际删除命令即可:

# 替换为实际路径
TARGET_DIR="/你的目标目录绝对路径"
KEEP_LIST="/你的keep_list.txt文件绝对路径"

find "$TARGET_DIR" -maxdepth 1 -type f | while read -r file; do
  filename=$(basename "$file")
  match_rule="^$(tr '\n' '|' < "$KEEP_LIST" | sed 's/|$//')_"
  if ! grep -qE "$match_rule" <<< "$filename"; then
    echo "正在删除: $file"
    rm -- "$file"
  fi
done

可调整的细节说明

  • 命令里的-maxdepth 1参数表示只处理目标目录下的第一层文件,不会递归扫描子目录;如果需要连子目录里的文件一起按规则清理,删掉这个参数即可
  • 匹配逻辑是严格按“下划线分隔”判断的,不会出现长数字前缀误匹配短列表项的问题

内容的提问来源于stack exchange,提问作者dyna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 19:36:07