You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用grep/awk或脚本筛选文本中距今4天前的MySQL备份文件?

我来帮你搞定这个需求!针对你说的MySQL备份文件名筛选,我整理了几种实用的方法,你可以根据自己的习惯选:

一、命令行组合方案(grep + awk + date)

这个方案适合直接在终端快速处理,不需要写脚本:

  1. 先计算出4天前的日期(格式和文件名里的一致:YYYY-MM-DD):

    • Linux系统:
      target_date=$(date -d "-4 days" +%Y-%m-%d)
      
    • macOS系统(date命令参数不同):
      target_date=$(date -v -4d +%Y-%m-%d)
      
  2. 从你的文件名列表文件(假设叫backup_list.txt)中筛选符合条件的文件:

    grep -E "MySql-DataBase-[0-9]{4}-[0-9]{2}-[0-9]{2}_" backup_list.txt | awk -v target="$target_date" '{
        # 提取文件名中的日期部分(从第16位开始取10个字符)
        file_date = substr($0, 16, 10)
        if (file_date <= target) print $0
    }'
    
二、纯awk方案(更简洁)

如果不想用grep,直接用awk就能完成所有逻辑,跨平台只需调整date命令:

  • Linux版本:

    awk -v target="$(date -d "-4 days" +%Y-%m-%d)" '{
        match($0, /MySql-DataBase-([0-9]{4}-[0-9]{2}-[0-9]{2})_/, date_arr)
        if (date_arr[1] <= target) print $0
    }' backup_list.txt
    
  • macOS版本:

    awk -v target="$(date -v -4d +%Y-%m-%d)" '{
        match($0, /MySql-DataBase-([0-9]{4}-[0-9]{2}-[0-9]{2})_/, date_arr)
        if (date_arr[1] <= target) print $0
    }' backup_list.txt
    
三、Python脚本方案(灵活易扩展)

如果需要更灵活的处理(比如后续要加其他筛选条件),Python脚本是不错的选择:

import datetime
import re

# 替换成你的文件名列表文件路径
file_path = "backup_list.txt"
# 计算4天前的日期
four_days_ago = datetime.date.today() - datetime.timedelta(days=4)
target_date = four_days_ago.strftime("%Y-%m-%d")

# 读取文件并筛选
with open(file_path, "r", encoding="utf-8") as f:
    for line in f:
        line = line.strip()
        # 用正则提取日期(适配固定格式的文件名)
        match_result = re.search(r"MySql-DataBase-(\d{4}-\d{2}-\d{2})_", line)
        if match_result:
            file_date = match_result.group(1)
            if file_date <= target_date:
                print(line)

使用方法:保存为filter_backups.py,然后在终端运行python filter_backups.py即可。

四、PHP脚本方案(适合PHP开发者)

要是你平时用PHP更多,这个脚本也能轻松实现需求:

<?php
// 文件名列表文件路径
$listFile = "backup_list.txt";
// 计算4天前的日期,格式YYYY-MM-DD
$targetDate = date("Y-m-d", strtotime("-4 days"));

// 读取文件内容(跳过空行)
$lines = file($listFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach ($lines as $filename) {
    // 用正则提取日期部分
    preg_match("/MySql-DataBase-(\d{4}-\d{2}-\d{2})_/", $filename, $matches);
    if (isset($matches[1]) && $matches[1] <= $targetDate) {
        echo $filename . PHP_EOL;
    }
}
?>

使用方法:保存为filter_backups.php,然后运行php filter_backups.php

这些方法都能帮你精准筛选出当前日期减4天及更早的备份文件,要是你文件名格式有细微变化,只需要调整正则表达式或者字符串截取的位置就行~

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

火山引擎 最新活动