我正在尝试让 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