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

如何筛选文件名含YYYYMMDDHH24MISS格式的每日最新文件?

按日期筛选每日最新文件的正确方法

问题分析

你需要从命名格式为abc_YYYYMMDDHH24MISS.txt的文件中,提取每日(YYYYMMDD部分)的最新文件。原命令ls | cut -b 1-12|uniq |ls |sort|tail -1逻辑错误:uniq的输出无法传递给ls(ls不会读取管道输入,而是直接列出当前目录所有文件),最终仅能获取全局最新的单个文件,无法按日分组筛选。

解决方案

方法1:sort + awk 分组取最新

利用文件名的时间戳特性,先排序再按日期分组保留每组最后一行(即当日最新文件):

ls abc_*.txt | sort | awk -F '_' '{date=substr($2,1,8)} date!=prev{if(prev!="") print line; prev=date} {line=$0} END{print line}'

命令解释:

  • ls abc_*.txt:仅列出目标格式的文件,避免无关文件干扰
  • sort:按文件名排序(时间戳为连续数字,排序后同日期文件按时间先后排列,最新的在组内最后)
  • awk逻辑:
    • 以_为分隔符,提取文件名中前8位日期部分
    • 当日期切换时,打印上一日的最新文件;循环结束后打印最后一日的最新文件

方法2:Bash循环遍历日期

先提取所有唯一日期,再逐个日期筛选最新文件:

for date in $(ls abc_*.txt | cut -d'_' -f2 | cut -c1-8 | sort -u); do
  ls abc_${date}*.txt | sort | tail -1
done

命令解释:

  • ls abc_*.txt | cut -d'_' -f2 | cut -c1-8 | sort -u:提取所有不重复的日期
  • 循环每个日期,列出该日期的所有文件,排序后取最后一个(当日最新)

验证结果

针对你的输入文件,两种方法都会输出期望结果:

abc_20230101043006.txt
abc_20230102043006.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:04