Bash:根据文件名中的日期范围查找所有文件

问题描述 投票:1回答:1

我有一个目录,其中包含许多以以下日期格式命名的文件:

YYYYMMDDHH00

末尾带有COM端口号。例如

202003240200COM10.txt
202003240300COM10.txt
202003240400COM10.txt

这些文件每小时由脚本生成,并且名称始终采用相同的格式。

我想使用“查找”命令返回我在脚本中指定的日期范围内的文件列表,例如“ 1小时前”和“ 1个月前”之间的所有文件。该脚本将在随机时间运行,我一直希望它在相对于当前日期的日期范围内进行搜索,因此,我不需要任何硬编码的日期。

我可以使用“ date”命令这样获取1小时前和3个月前的日期:

bash-4.4$ date --date "1 hour ago" +%Y%m%d%H00
202003241500
bash-4.4$ date --date "1 month ago" +%Y%m%d%H00
202002241600

但是我正在努力使它正确进入“ find”命令。我尝试了以下方法:

for currentfile in *.txt
do
    filedate=${currentfile:0:12}
        file_date=$(date +%s -d "${filedate:0:8}${filedate:8:2}${filedate:10:2}${filedate12:2}")
        start_date=$(date +%s -d "1 month ago")
        end_date=$(date +%s -d "1 hour ago")

        if [[ $file_date -ge $start_date && $file_date -le $end_date ]]; then
                echo $currentfile
        fi
done

但是控制台输出只是这些错误的泛滥,似乎每个文件都有一个错误:

date: invalid date 201703190300
date: invalid date 201703190400
date: invalid date 201703190500
date: invalid date 201703190600
date: invalid date 201703190700
date: invalid date 201703190800
date: invalid date 201703190900
date: invalid date 201703191000
date: invalid date 201703191100
date: invalid date 201703191200
date: invalid date 201703191300
date: invalid date 201703191400
date: invalid date 201703191500
date: invalid date 201703191600
date: invalid date 201703191700
date: invalid date 201703191800
date: invalid date 201703191900

请帮助:)

bash date find filenames
1个回答
0
投票

[date -d期望在日期和时间部分之间有一个空格或T

file_date=$(date +%s -d "${filedate:0:8} ${filedate:8:2}${filedate:10:2}${filedate12:2}")
© www.soinside.com 2019 - 2024. All rights reserved.