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

如何按分类保留YYYYMMDDHHMM命名的最新文件并删除旧文件

保留分类文件中最新版本的解决方案

需求背景

你需要处理一批按文件名前缀分类的文件,每个文件名的后缀是YYYYMMDDHHMM格式的时间戳。核心目标是:针对每个前缀分类,只保留该分类下时间戳最新的文件,删除其他所有旧文件。

示例文件列表

"10MX232 .201801070702.txt" >>old file
"10MX232 .201801080703.txt" >>old file
"10MX232 .201801161651.txt" >>old file
"10MX232 .201801181531.txt" >>old file
"10MX232 .201805120846.txt" >>----new file
"1465LY1 .201804051311.txt" >>old file
"1465LY1 .201805101441.txt" >>old file
"1465LY1 .201805110912.txt" >>old file
"1465LY1 .201805111419.txt" >>----new file
"17NX232 .201801250054.txt" >>old file
"17NX232 .201801260055.txt" >>old file
"17NX232 .201801270055.txt" >>old file
"17NX232 .201801280056.txt" >>old file
"17NX232 .201801290057.txt" >>old file
"17NX232 .201801300058.txt" >>----new file

期望执行结果

清理完成后,目录下仅保留各分类的最新文件:

ls
10MX232 .201805120846.txt 1465LY1 .201805111419.txt 17NX232 .201801300058.txt

实现方案(Shell脚本)

下面是一个适用于Linux/Unix环境的Shell脚本,能自动完成分组筛选和旧文件删除:

#!/bin/bash

# 遍历所有唯一的文件前缀分类
for prefix in $(ls *.txt | sed -E 's/^([^.]+)\..*\.txt/\1/' | sort -u); do
    # 列出当前分类下的所有文件,按时间戳倒序,跳过最新的那个,删除其余旧文件
    ls "${prefix}".*.txt | sort -r | tail -n +2 | xargs rm -f
done

脚本细节解释

  • sed -E 's/^([^.]+)\..*\.txt/\1/':从文件名中提取前缀部分(第一个.之前的内容)
  • sort -u:去除重复的前缀,得到所有独立的分类
  • ls "${prefix}".*.txt | sort -r:列出当前分类的所有文件,并按文件名(即时间戳)倒序排列,最新文件排在首位
  • tail -n +2:跳过排序后的第一个文件(最新的),获取所有需要删除的旧文件
  • xargs rm -f:批量删除这些旧文件

⚠️ 重要提示:执行脚本前请先测试!把rm -f替换成echo,先确认要删除的文件是否正确,避免误删重要数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:21