我一直在使用此命令删除服务器上的旧备份:
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
,但我认为看到它并提醒它处于活动状态是有用的