根据文件夹结构删除年历目录

时间:2017-11-17 20:09:49

标签: linux bash

我需要根据文件夹的结构删除bash脚本中超过1年的目录。文件夹结构为年/月/日,例如backups / 2016 / nov / 03或backups / 2017 / jan / 02。如何循环浏览文件夹并删除超过一年的文件夹?

就我而言

 TIMESTAMP=`date +%F_%H%M%S`
BACKUPBASEDIR=/data/pgsql/data/backup
HOSTNAME=`hostname`
YEAR=`date +%Y`
MONTH=`date +%b`
DAY=`date +%d`
LASTYEAR=$(( $YEAR - 1 ))
YEARINT=`printf '%d\n' "$YEAR"`
BACKUPDIR=$BACKUPBASEDIR/$LASTYEAR/$MONTH/$DAY

for f in $BACKUPBASEDIR/*
 do
  [ $(printf '%d\n' "$f") - $YEARINT -gt 1]; then
    echo "i'm not sure what to do at this point"
fi
done
exit

编辑:

$ ls -al
total 12
drwx------. 3 postgres postgres 4096 Oct 25  2016 .
drwx------. 5 postgres postgres 4096 Dec  1  2016 ..
drwx------. 2 postgres postgres 4096 Oct 25  2016 25

目录25的修改日期为2016年10月25日,但是当我运行时

find /data/pgsql/data/backup/ -ctime +365 -type d

没有找到任何内容,即使名为25的目录显然还没有被修改超过一年。

1 个答案:

答案 0 :(得分:0)

所有mtimeatime建议都忽略了原始问题基于文件夹结构的事实。如果要使用find,则至少应touch目录来设置日期。但你也可以使用它:

#!/bin/bash
now=$(date -d now-1year +%s)
for d  in backups /*/*/* ; do
    if [ -type d  $d ] ; do
        year=$(echo $d|cut -d/ -f2)
        month=$(echo $d|cut -d/ -f3)
        day=$(echo $d|cut -d/ -f4)
        cond=$(date -d $day-$month-$year +%s)
        if [ $cond -lt $now ] ; then
            rm -rf $d
        fi
    fi
done