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

Linux下如何仅复制周日或每月7/14/21/28日生成的.bak备份文件

可以实现,优先使用备份文件名自带的日期字段做判断,相比依赖文件系统的创建/修改时间属性更稳定,不会因为文件迁移、二次修改等操作导致时间属性变化引发误判。

实现方案

方案1:全规则匹配(同时支持周日/固定日期判断,推荐)

直接改造原有find命令,对筛选出的文件提取文件名中的日期字段做规则校验后再执行拷贝:

find /data/src/ -iname "*.bak" -mmin +3 -type f | awk -F'_' '{
  dt = $3"-"$4"-"$5
  cmd = "date -d "dt" +%u"
  cmd | getline wk
  close(cmd)
  # %u返回1=周一、7=周日,匹配规则:周日 或 日期为07/14/21/28
  if (wk == 7 || $5 ~ /^(07|14|21|28)$/) {
    print $0
  }
}' | xargs -I {} cp -n -p -v {} /data/dest

命令逻辑说明:

  • 前置筛选规则和你原有逻辑完全一致,仅保留后缀为.bak、修改时间超过3分钟的普通文件
  • awk以_为分隔符,提取文件名中的年($3)、月($4)、日($5)字段
  • 调用date命令将提取的日期转换为周数,判断是否为周日
  • 匹配任意规则的文件名会输出给后续xargs执行拷贝操作,拷贝参数和你原有设置完全一致

注意事项:

  • 正式执行前可以把末尾的cp -n -p -v {} /data/dest替换为echo "待拷贝文件:{}",先验证筛选出的文件是否符合要求,确认无误后再替换为实际拷贝命令
  • 如果你使用的是macOS系统,date命令参数存在差异,把date -d "dt" +%u替换为date -j -f "%Y-%m-%d" dt +%u即可

方案2:仅匹配固定日期(临时快速筛选用)

如果不需要判断周日的规则,仅需匹配每月7/14/21/28的备份,可以直接用grep匹配文件名:

find /data/src/ -iname "*.bak" -mmin +3 -type f | grep -E '_20[0-9]{2}_[0-9]{2}_(07|14|21|28)_' | xargs -I {} cp -n -p -v {} /data/dest

该方案不支持动态判断周日,仅适合临时筛选固定日期的备份使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:03