使用查找命令删除旧备份

使用查找命令删除旧备份

我一直在使用此命令删除服务器上的旧备份:

find /backups/etcbak/ -mtime +7 -exec rm {} \; && find /backups/varlogsbak/ -mtime +2 -exec rm {} \; && find /backups/varmysqlbak/ -mtime +7 -exec rm {} \; 

上述命令非常适合删除目标目录中的实际文件。

我的问题是:

如何使用上述命令来删除子目录?

(我添加了一个 mysql 备份脚本,它根据当前日期在目标目录中创建子目录)。

我尝试将上面的命令调整如下:

find /backups/etcbak/ -mtime +7 -exec rm -rf {} \; && find /backups/varlogsbak/ -mtime +2 -exec rm -rf {} \; && find /backups/varmysqlbak/ -mtime +7 -exec rm -rf {} \; && find /backups/varmongobak/ -mtime +7 -exec rm -rf {} \;

但它根本不会删除旧的子目录。

目标是删除目标目录中可能存在的文件和目录。

例如:

/backups/etcbak/filename (where "filename" is deleted after 7 days)

/backups/etcbak/dirname (其中名为“dirname”的子目录及其内容也会在 7 天后删除)

有人知道如何破解这个吗?谢谢

答案1

我的方法是根据您的标准删除文件,然后删除空目录

find /backups/etcbak /backups/varmysqlbak /backups/varmongobak -depth -type f -mtime +7 -delete
find /backups/varlogsbak -depth -type f -mtime +2 -delete

find /backups/etcbak /backups/varlogsbak /backups/varmysqlbak /backups/varmongobak -mindepth 1 -depth type d -delete 2>/dev/null

严格来说,-depth不是必需的,因为它暗示了-delete,但我认为看到它并提醒它处于活动状态是有用的

相关内容