bash脚本:使用日期在文件夹名称进行计算的(删除超过X旧的文件夹)
问题描述:
我们有像“分贝 _YYYY-MM-DD”备份foldernames。bash脚本:使用日期在文件夹名称进行计算的(删除超过X旧的文件夹)
是否有某种类型的命令/表达式可用于比较文件夹(名称)日期与当前(系统)日期并删除比X天更早的任何东西?
背景: 我们已经尝试过“发现”和“-mtime + X”,而是因为它在修改/删除文件夹之后内的文件更新修改时间是不是一个完美的解决方案..
这是一种罕见的疾病,但使得-mtime比较“故障”,所以我期待一个替代和该文件夹的名称不创建/备份过程中不断改变/修改 ..
答
您可以使用下面的方法来生成文件夹名称
#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.
答
好有关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
答
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
但是如果一个月有什么不同? –
它也可以做月份和年份的技巧。年份首先比较,然后是月份,然后是日期 – nagendra547
另外我还提供了一种计算x天后的日期的方法。做检查 – nagendra547