获取日期超过7天的文件列表?

时间:2013-04-10 10:05:41

标签: bash date ubuntu pattern-matching

我有一个创建mysql备份的脚本,最终会调用这些文件。

DB_name-M_D_Y.gz例如stackoverflow_users-04_10_2013.gz

现在我不知道文件的名称,只是模式。

我需要做的是修改脚本,在创建新备份之前,检查任何文件中的日期是否超过7天,如果有的话,请查看其他内容。

我知道如何做其他事情,但首先获取文件列表是困难的。

我不能只使用修改日期,因为其他脚本会触及文件,因此需要从文件名中读取日期。

那么,我如何获得文件列表?

<小时/> 为了回复评论,假设这个虚拟数据

当前日期:10 th 2013年4月

database zero-03_31_2013.gz    #Older | Notice this one has spaces
database_one-04_01_2013.gz     #Older
database_two-04_02_2013.gz     #Older
database_three-04_03_2013.gz   #Newer | Actually 7 days, but we want OLDER than!
database_four-04_04_2013.gz    #Newer
database_five-04_05_2013.gz    #Newer
dater.sh                       #Does not have the .gz extension | Not deleted

Bash版

matthew@play:~/test$ bash --version
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

1 个答案:

答案 0 :(得分:5)

尝试以下脚本:

#!/bin/bash

# get the date 7 days ago
sevenDaysAgo=$(date -d "-7 day 00:00:00" +%s)

# create an array to hold the files older than 7 days
result=()

# loop over the files
while IFS= read -d $'\0' -r file
do
    # extract the date from each filename using a regex
    if [[ $file =~ ^.*-([0-9]+)_([0-9]+)_([0-9]+).gz$ ]]
    then
        m="${BASH_REMATCH[1]}"
        d="${BASH_REMATCH[2]}"
        y="${BASH_REMATCH[3]}"
        fileDateTime="$(date -d ${y}${m}${d} +%s)"

        # check if the date is older than 7 days ago
        if (( fileDateTime < sevenDaysAgo ))
        then
            result+=( "$file" )
        fi
    fi
done < <(find . -type f -name "*.gz" -print0)

# print out the results for testing
for f in "${result[@]}"
do
    echo "$f"
done