2017-08-15 75 views
1

我们有像“分贝 _YYYY-MM-DD”备份foldernames。bash脚本:使用日期在文件夹名称进行计算的(删除超过X旧的文件夹)

是否有某种类型的命令/表达式可用于比较文件夹(名称)日期与当前(系统)日期并删除比X天更早的任何东西?

背景: 我们已经尝试过“发现”和“-mtime + X”,而是因为它在修改/删除文件夹之后内的文件更新修改时间是不是一个完美的解决方案..

这是一种罕见的疾病,但使得-mtime比较“故障”,所以我期待一个替代和该文件夹的名称不创建/备份过程中不断改变/修改 ..

回答

0

您可以使用下面的方法来生成文件夹名称

#foldername="db_"`date "+%Y-%m-%d"` 
#echo $foldername 
db_2017-08-15 
#mkdir $foldername 

现在你可以比较喜欢串用给定日期

所以7天旧的日期将是

givenDate="db_"`date -v-7d "+%Y-%m-%d"` 

如果($文件夹名> $ givenDate)

True if foldername sorts after givenDate lexicographically. 
+0

但是如果一个月有什么不同? –

+0

它也可以做月份和年份的技巧。年份首先比较,然后是月份,然后是日期 – nagendra547

+0

另外我还提供了一种计算x天后的日期的方法。做检查 – nagendra547

0

好有关YYYY-MM-DD日期格式的事情是字典比较顺序与时间顺序匹配。因此,你可以简单地从你的目录名中提取备份日期,并将其与相同格式的相应日期的比较结果为一个字符串:

backupdirname=db_2017-08-12 
X=6 

backupdate="${backupdirname: -10}" 
dropdate="$(date -d "$X days ago" +%Y-%m-%d)" 

if [[ "$backupdate" < "$dropdate" ]] 
then 
    echo "Delete $backupdirname" 
else 
    echo "Keep $backupdirname" 
fi 
0
ref_date=$(date -d '2017-01-02' +%s) 
for file in ./db_*; do 
    file_time=$(date -d ${file#*db_} +%s) 
    if [[ $file_time > $ref_date ]]; then 
     echo "$file date is newer than ref date" 
     # ... 
    else 
     echo "$file date is older or euqal to ref date" 
     # ... 
    fi 
done 
相关问题