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

如何在Unix目录中依据文件名子串删除重复文件

按文件名子串分组去重实现方案

你之前使用的md5sum方案是基于文件内容一致性判断重复,和你需要的按文件名特定子串分组去重的规则不匹配,因此无法得到预期结果。

步骤1:预览待删除文件(强制先执行确认,避免误删)

# 通用预览命令:自动提取第一个下划线之后的内容作为分组键,同组除第一个文件外都会被列为待删文件
find . -type f -name "*.DAT" | awk '{
    # 复制原文件名到临时变量t
    t=$0
    # 去掉第一个下划线及之前的前缀,剩下的就是分组匹配子串
    sub(/^[^_]*_/, "", t)
    # 同组第一个文件不会输出,后续重复的直接打印
    if(seen[t]++) print $0
}'

执行后输出的所有文件就是待删除的列表,确认和你的预期一致后再执行删除操作。

步骤2:执行删除

普通场景(文件名无空格/特殊字符)

find . -type f -name "*.DAT" | awk '{t=$0;sub(/^[^_]*_/, "", t);if(seen[t]++) print $0}' | xargs rm -f

兼容特殊字符场景(文件名含空格、换行等)

find . -type f -name "*.DAT" -print0 | awk -v RS='\0' '{t=$0;sub(/^[^_]*_/, "", t);if(seen[t]++) printf "%s\0", $0}' | xargs -0 rm -f

规则调整说明

如果后续你需要修改分组子串的匹配规则,只需要调整awk中t变量的提取逻辑即可,比如要固定取GRUP开头到.DAT结尾的部分作为分组键,可把sub语句替换为match($0, /GRUP.*\.DAT$/, arr); t=arr[0]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:45:03