如何删除日期超过 30 天的文件

如何删除日期超过 30 天的文件

如果我有一个文件,其文件名是创建日期:

temp_30042019
temp_15042019
temp_10042021
temp_20022020
temp_21102022
temp_22102022
temp_01112022

我如何将文件名与今天的当前日期进行比较

$ echo `date +"%d%m%Y"`
#output:
01112022

如果文件名日期早于 30 天,则将其删除。我希望最终得到

temp_21102022
temp_22102022
temp_01112022

答案1

使用bash脚本:

#!/usr/bin/bash

older30days=$(date --date 'now - 30 days' '+%Y-%m-%d')

echo Checking files before $older30days

for file in ./temp_*; do
   cdate="$(echo ${file#*_} | awk -v FS='' -v OFS='-' '{print $5$6$7$8,$3$4,$1$2}')"

   if [[ $cdate < $older30days ]]; then
      echo "Removing file: " $file
      rm $file
   fi
done

您不需要echo在上面的代码中打印,但它对于了解脚本中实际发生的情况应该很有用。

使用echo ${file#*_} | awk -v FS='' -v OFS='-' '{print $5$6$7$8,$3$4,$1$2}我将文件名的日期解析为有效日期,以便我能够使用if条件进行比较。例如,具有以下文件名:

temp_15042019

通过上面的代码,我将其解析为:

2019-04-15 #YYYY-MM-DD

相关内容