使用 cron 从目录中删除旧的备份文件夹

使用 cron 从目录中删除旧的备份文件夹

我正在尝试让 crontab 自动删除目录中除最近的 6 个文件夹之外的备份文件夹,因为每天都会在目录中创建备份。

我所有的备份文件夹都只是日期戳,例如:2017_12_29。

当我rm -rf $(ls -1 /BACKUPDIR/ | head -n -6)从终端运行时,它会删除除最近的 6 个文件夹之外的所有文件夹,这正是我期望它做的,但是当 crontab 运行它时它似乎没有执行任何操作,并且目录中没有任何内容被删除。

我不知道我这里哪里做错了。

编辑:目前我只是使用 rsync 来克隆 / 目录(不包括一些目录)。

这是它在 root 的 crontab 中的样子:

00 22 * * * /usr/bin/rsync -aqvHAXS --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /tmp/ --exclude /run/ --exclude /mnt/ --exclude /media/ --exclude /lost+found/ --delete / /BACKUPDIR/$(date +\%Y_\%m_\%d)

答案1

解析根本ls不是一个好主意,所以这里有一个我认为更稳定的解决方案:

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf

这只是rm为了测试目的而打印命令,如果它实现了您想要删除的功能echo,只需将其添加到您的 crontab 中,例如每周日 18:00 运行:

00 18 * * 0 find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 rm -rf

相关内容