我有一个用于存储数据库备份的挂载点,为了避免其增长到无法控制的程度,我打算只保留 30 天的备份,但也保留每 15 天创建的备份。因此,如果文件夹是在 1 日或 15 日创建的,那么当 30 天到期时,我希望它也能保留下来。
我目前使用它仅保留 30 天的备份,如何省略 1 日和 15 日创建的文件夹?
find /mnt/clusterfs01-data01/db01/* -type d -ctime +30 -exec rm -rf {} \;
文件夹名称的示例目录列表。
0 drwx------ 7 root root 324 Nov 11 01:35 2016-11-11_01-31-41
0 drwx------ 7 root root 250 Nov 11 06:25 2016-11-11_06-25-03
我不介意除此之外的其他解决方案find
。
答案1
要根据目录名称的日期时间字符串排除匹配项,您可以添加
! \( -name '????-15-??*' -o -name '????-30-??*' \)
或者
-not \( -name '????-15-??*' -o -name '????-30-??*' \)
执行find
命令。
如果你真的想根据时间戳来判断,那么我能想到的唯一方法就是(笔记我mtime
在这里使用,因为您的touch
命令似乎没有修改ctime
我的系统:更改为%Td
):%Cd
ctime
find dir -type d -mtime +30 -printf '%Td\t%p\0' |
while read -rd '' day dir; do
case "$day" in
15|30) ;;
*) echo rm -rf -- "$dir";;
esac
done
答案2
尝试一下这个:
rm -rf $(find /mnt/clusterfs01-data01/db01/* -maxdepth 0 -type d -ctime +30 | grep -v "[0-9]\{4\}-01\|15-[0-9]\{2\}")