fix: retain only recent WebDAV backups
This commit is contained in:
@@ -78,10 +78,38 @@ func RunCloudBackup(c *gin.Context) {
|
|||||||
|
|
||||||
// 清理本地旧备份,保留最近5份
|
// 清理本地旧备份,保留最近5份
|
||||||
config.CleanOldBackups(5)
|
config.CleanOldBackups(5)
|
||||||
|
if err := cleanOldRemoteBackups(client, 5); err != nil {
|
||||||
|
log.Printf("云端旧备份清理失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
c.JSON(http.StatusOK, Response{Success: true, Message: "备份成功: " + remoteName})
|
c.JSON(http.StatusOK, Response{Success: true, Message: "备份成功: " + remoteName})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cleanOldRemoteBackups 清理 WebDAV 上的旧备份,仅保留最近 keep 份。
|
||||||
|
func cleanOldRemoteBackups(client *config.WebDAVClient, keep int) error {
|
||||||
|
if keep < 1 {
|
||||||
|
keep = 1
|
||||||
|
}
|
||||||
|
files, err := client.List()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(files) <= keep {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var firstErr error
|
||||||
|
for _, file := range files[keep:] {
|
||||||
|
if err := client.Delete(file.Name); err != nil {
|
||||||
|
if firstErr == nil {
|
||||||
|
firstErr = fmt.Errorf("删除 %s: %w", file.Name, err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
log.Printf("已清理云端旧备份: %s", file.Name)
|
||||||
|
}
|
||||||
|
return firstErr
|
||||||
|
}
|
||||||
|
|
||||||
// ListCloudBackups 列出云端备份
|
// ListCloudBackups 列出云端备份
|
||||||
func ListCloudBackups(c *gin.Context) {
|
func ListCloudBackups(c *gin.Context) {
|
||||||
client, err := getWebDAVClient()
|
client, err := getWebDAVClient()
|
||||||
@@ -217,5 +245,8 @@ func doAutoBackup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
config.CleanOldBackups(5)
|
config.CleanOldBackups(5)
|
||||||
|
if err := cleanOldRemoteBackups(client, 5); err != nil {
|
||||||
|
log.Printf("云端旧备份清理失败: %v", err)
|
||||||
|
}
|
||||||
log.Printf("自动备份成功: %s", remoteName)
|
log.Printf("自动备份成功: %s", remoteName)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user