fix: retain only recent WebDAV backups
This commit is contained in:
@@ -78,10 +78,38 @@ func RunCloudBackup(c *gin.Context) {
|
||||
|
||||
// 清理本地旧备份,保留最近5份
|
||||
config.CleanOldBackups(5)
|
||||
if err := cleanOldRemoteBackups(client, 5); err != nil {
|
||||
log.Printf("云端旧备份清理失败: %v", err)
|
||||
}
|
||||
|
||||
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 列出云端备份
|
||||
func ListCloudBackups(c *gin.Context) {
|
||||
client, err := getWebDAVClient()
|
||||
@@ -217,5 +245,8 @@ func doAutoBackup() {
|
||||
}
|
||||
|
||||
config.CleanOldBackups(5)
|
||||
if err := cleanOldRemoteBackups(client, 5); err != nil {
|
||||
log.Printf("云端旧备份清理失败: %v", err)
|
||||
}
|
||||
log.Printf("自动备份成功: %s", remoteName)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user