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

UNIX下基于日期逻辑清理目录文件、保留指定文件的方案咨询

实现方案

优先用文件名自带的日期逻辑处理,比解析ls输出、读取文件修改时间更稳定,不会受系统区域设置、文件被意外修改修改时间的影响:

步骤1:确认保留文件数量

你现有命令ls -ltr Test* | grep \date +%b` | head -2 只会保留2个文件,如果你的需求是保留当月最早2天的所有文件(每天对应ctl和txt共4个),把下方的KEEP_NUM`改成4即可。

步骤2:测试删除逻辑(先不执行真实删除)

执行以下命令,会打印出待删除的文件列表,先核对是否符合预期:

# 定义需要保留的当月文件数量
KEEP_NUM=2
# 获取当前年月,格式为YYYYMM,匹配文件名前缀
CUR_MONTH=$(date +%Y%m)
# 按文件名升序排序(对应日期从早到晚),跳过前KEEP_NUM个,打印待删除文件
ls Test${CUR_MONTH}* | sort | tail -n +$((KEEP_NUM + 1)) | xargs echo rm

步骤3:执行实际删除

确认待删除列表无误后,把命令里的echo rm改成rm即可。

定时任务配置

把确认可用的命令写入shell脚本,添加到crontab实现每月末自动执行,示例配置(每月最后一天23点运行):

0 23 28-31 * * [ "$(date +%d -d tomorrow)" = "01" ] && /bin/bash /path/to/clean_script.sh

补充说明

如果你的场景必须依赖文件修改时间而非文件名日期,用以下更稳定的find方案,避免解析ls的兼容性问题:

# 仅查找当月修改的Test开头文件,按修改时间升序,跳过前2个删除(先加echo测试)
find . -maxdepth 1 -type f -name "Test*" -newermt "$(date +%Y-%m-01)" \
  -printf "%T@ %p\n" | sort | tail -n +3 | cut -d' ' -f2- | xargs echo rm

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:48:03