我需要根据文件夹的结构删除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的目录显然还没有被修改超过一年。
答案 0 :(得分:0)
所有mtime
或atime
建议都忽略了原始问题基于文件夹结构的事实。如果要使用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