如果我有一个文件,其文件名是创建日期:
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