如何根据文件名中的日期删除旧备份文件夹

如何根据文件名中的日期删除旧备份文件夹

我有两个文件夹用于完整文件夹和增量文件夹,其中根据文件夹名称中的日期有单独的备份文件夹,例如:

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 脚本:

  1. 获取要以 yyyymmdd 格式作为 int 排列的文件夹名称
  2. 以 yyyymmdd 格式计算 currentdate-90 作为 int
  3. 列出低于 currentdate-90 的变量,更改回格式 dd-mm-yyyy
  4. 为列出的目录运行 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

为了进行测试,您可以添加一个echobeforerm来查看将要执行的操作,但不执行。

这里我们只是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

考虑使用标准备份软件。可能是巴库拉。

相关内容