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

如何在Unix系统中按文件名规则删除含JP标识的过期文件?

删除Unix系统中含指定标识且日期早于指定值的文件

我来帮你搞定这个需求!在Unix系统下,我们可以借助find命令结合简单的字符串处理,精准匹配并删除符合条件的文件,下面是具体实现方案:

核心命令(针对指定日期2018_03_21)

首先推荐你先使用预览版本确认要删除的文件,避免误删:

find . -type f -name "*JP*_????_??_??.info" -exec bash -c '
target_date="2018_03_21"
# 从文件名中提取日期部分(去掉前缀下划线)
file_date=$(echo "$1" | grep -o "_[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}" | cut -c2-)
# 利用YYYY_MM_DD格式的字符串特性直接比较大小
if [[ "$file_date" < "$target_date" ]]; then
  echo "待删除文件:$1"
  # 确认无误后,取消下面这行的注释执行删除
  # rm "$1"
fi
' _ {} \;

命令拆解说明

  • find . -type f -name "*JP*_????_??_??.info":在当前目录及所有子目录中,查找文件类型、文件名包含JP且符合xxxx_YYYY_MM_DD.info格式的文件。
  • -exec bash -c '...' _ {} \;:对每个找到的文件,调用bash子脚本进行日期判断。
  • file_date=$(...):通过正则匹配提取文件名中的日期段(比如从run.sh_JP_2018_03_19.info中提取出2018_03_19)。
  • [[ "$file_date" < "$target_date" ]]:由于我们的日期格式是YYYY_MM_DD,字符串的字典序和实际日期的先后顺序完全一致,所以直接用字符串比较就能判断文件日期是否早于目标日期。

更灵活的版本(支持传入目标日期参数)

如果日后需要频繁修改目标日期,可以把日期作为外部参数传入,不用每次修改脚本内容:

# 先定义目标日期,执行时修改这个值即可
TARGET_DATE="2018_03_21"

find . -type f -name "*JP*_????_??_??.info" -exec bash -c '
file_date=$(echo "$1" | grep -o "_[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}" | cut -c2-)
if [[ "$file_date" < "$2" ]]; then
  echo "待删除文件:$1"
  # rm "$1"
fi
' _ {} "$TARGET_DATE" \;

安全提示

  1. 务必先预览:执行删除前一定要先运行带echo的版本,确认列出的文件都是你想要删除的,避免误删重要文件。
  2. 限制查找范围:如果不需要递归查找子目录,给find命令加上-maxdepth 1参数,比如find . -maxdepth 1 -type f ...,只在当前目录查找。
  3. 特殊字符兼容:这个命令已经考虑了文件名含空格、特殊字符的情况,find会正确传递文件名给子脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:38:46