![如何根据文件名中的日期删除旧备份文件夹](https://linux22.com/image/9475/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%9A%84%E6%97%A5%E6%9C%9F%E5%88%A0%E9%99%A4%E6%97%A7%E5%A4%87%E4%BB%BD%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我有两个文件夹用于完整文件夹和增量文件夹,其中根据文件夹名称中的日期有单独的备份文件夹,例如:
cd /backup/Full
Jul 12 17:52 01-07-2017
Jul 12 18:32 08-07-2017
Jul 15 18:20 15-07-2017
cd /backup/Incremental
Jul 13 12:01 02-07-2017
Jul 13 12:09 03-07-2017
Jul 13 12:14 04-07-2017
Jul 13 12:22 05-07-2017
Jul 13 12:36 06-07-2017
Jul 13 12:47 07-07-2017
Jul 13 12:49 09-07-2017
我想运行脚本,该脚本将根据日期计算 90 天前的文件夹作为文件夹名称,例如2017年1月7日并删除它(严格不考虑文件夹创建日期)。我需要使用相同的条件运行两个脚本,第一个用于完整,第二个用于增量。
答案1
寻找 。 -type d -mtime +90 -exec rm {}\;
- 在当前目录(.)中查找超过90天的文件(f),执行删除命令(rm)。
。可以替换为目录路径/
答案2
我建议制作 bash 脚本:
- 获取要以 yyyymmdd 格式作为 int 排列的文件夹名称
- 以 yyyymmdd 格式计算 currentdate-90 作为 int
- 列出低于 currentdate-90 的变量,更改回格式 dd-mm-yyyy
- 为列出的目录运行 rm 。
但也许有人做得更好
答案3
@Krzysztof Stasiak 描述的实现可能如下所示。
首先制作一些测试目录:
cd /backup
mkdir Full/20170{1,7}02
mkdir Incremental/2017010{1..9}
mkdir Incremental/2017070{1..9}
和脚本:
#! /bin/bash
cd /backup
for P in Full Incremental; do
cd $P
for D in *; do
[ $(date -d '-90 days' +%Y%m%d) -gt $D ] && rm -rf $D
done
cd ..
done
为了进行测试,您可以添加一个echo
beforerm
来查看将要执行的操作,但不执行。
这里我们只是cd
到主目录并for
为两个目录启动一个循环:
cd /backup
for P in Full Incremental; do
然后 cd 进入“periode”目录:
cd $P
然后for
对所有目录进行循环:
for D in *; do
如果今天减去 90 天大于-gt
目录$D
:
[ $(date -d '-90 days' +%Y%m%d) -gt $D ]
然后删除该目录:
&& rm -rf $D
你也可以这样写:
if [ $(date -d '-90 days' +%Y%m%d) -gt $D ]; then
rm -rf $D
fi
考虑使用标准备份软件。可能是巴库拉。