From 232ab535ed96860ef2c725cc653aa17db5b5497f Mon Sep 17 00:00:00 2001 From: tickstep Date: Fri, 10 Jun 2022 22:39:54 +0800 Subject: [PATCH] add sync command --- internal/command/sync.go | 141 +++++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 50 deletions(-) diff --git a/internal/command/sync.go b/internal/command/sync.go index 8c6c994..7753861 100644 --- a/internal/command/sync.go +++ b/internal/command/sync.go @@ -35,7 +35,7 @@ func CmdSync() cli.Command { UsageText: cmder.App().Name + " sync", Description: ` 备份功能。指定本地目录和对应的一个网盘目录,以备份文件。 - 备份功能支持一下三种模式: + 备份功能支持以下三种模式: 1. upload 备份本地文件,即上传本地文件到网盘,始终保持本地文件有一个完整的备份在网盘 2. download @@ -43,61 +43,102 @@ func CmdSync() cli.Command { 3. sync 双向备份,保持网盘文件和本地文件严格一致 - 示例: - 1. 启动同步备份任务 - aliyunpan-go sync start + 请输入以下命令查看如何配置和启动: + aliyunpan sync start -h `, Category: "阿里云盘", Before: cmder.ReloadConfigFunc, Action: func(c *cli.Context) error { - if config.Config.ActiveUser() == nil { - fmt.Println("未登录账号") - return nil - } - dp := c.Int("dp") - if dp == 0 { - dp = config.Config.MaxDownloadParallel - } - if dp == 0 { - dp = 2 - } - - up := c.Int("up") - if up == 0 { - up = config.Config.MaxUploadParallel - } - if up == 0 { - up = 2 - } - - downloadBlockSize := int64(config.Config.CacheSize) - if downloadBlockSize == 0 { - downloadBlockSize = int64(256 * 1024) - } - - uploadBlockSize := int64(c.Int("ubs") * 1024) - if uploadBlockSize == 0 { - uploadBlockSize = aliyunpan.DefaultChunkSize - } - - RunSync(up, dp, uploadBlockSize, downloadBlockSize) + cli.ShowCommandHelp(c, c.Command.Name) return nil }, - Flags: []cli.Flag{ - cli.IntFlag{ - Name: "dp", - Usage: "download parallel, 下载并发数量,即可以同时并发下载多少个文件。0代表跟从配置文件设置(取值范围:1 ~ 10)", - Value: 0, - }, - cli.IntFlag{ - Name: "up", - Usage: "upload parallel, 上传并发数量,即可以同时并发上传多少个文件。0代表跟从配置文件设置(取值范围:1 ~ 10)", - Value: 0, - }, - cli.IntFlag{ - Name: "ubs", - Usage: "upload block size,上传分片大小,单位KB。推荐值:1024 ~ 10240", - Value: 10240, + Subcommands: []cli.Command{ + { + Name: "start", + Usage: "启动sync同步备份任务", + UsageText: cmder.App().Name + " sync start [arguments...]", + Description: ` +使用备份配置文件启动sync同步备份任务。备份配置文件必须存在,不然启动失败。 +同步备份任务的配置文件保存在:(配置目录)/sync_drive/sync_drive_config.json,样例如下: +{ + "configVer": "1.0", + "syncTaskList": [ + { + "name": "设计文档备份", + "localFolderPath": "D:\\tickstep\\Documents\\设计文档", + "panFolderPath": "/sync_drive/我的文档", + "mode": "upload" + } + ] +} +相关字段说明如下: +name - 任务名称 +localFolderPath - 本地目录 +panFolderPath - 网盘目录 +mode - 模式: upload(备份本地文件到云盘),download(备份云盘文件到本地),sync(双向同步备份) + + 例子: + 1. 查看帮助 + aliyunpan sync start -h + + 2. 使用默认配置启动同步备份服务 + aliyunpan sync start + + 3. 启动sync服务,并配置下载并发为2,上传并发为1,上传分片大小为1MB + aliyunpan sync start -dp 2 -up 1 -ubs 1024 + +`, + Action: func(c *cli.Context) error { + if config.Config.ActiveUser() == nil { + fmt.Println("未登录账号") + return nil + } + dp := c.Int("dp") + if dp == 0 { + dp = config.Config.MaxDownloadParallel + } + if dp == 0 { + dp = 2 + } + + up := c.Int("up") + if up == 0 { + up = config.Config.MaxUploadParallel + } + if up == 0 { + up = 2 + } + + downloadBlockSize := int64(config.Config.CacheSize) + if downloadBlockSize == 0 { + downloadBlockSize = int64(256 * 1024) + } + + uploadBlockSize := int64(c.Int("ubs") * 1024) + if uploadBlockSize == 0 { + uploadBlockSize = aliyunpan.DefaultChunkSize + } + + RunSync(dp, up, downloadBlockSize, uploadBlockSize) + return nil + }, + Flags: []cli.Flag{ + cli.IntFlag{ + Name: "dp", + Usage: "download parallel, 下载并发数量,即可以同时并发下载多少个文件。0代表跟从配置文件设置(取值范围:1 ~ 10)", + Value: 0, + }, + cli.IntFlag{ + Name: "up", + Usage: "upload parallel, 上传并发数量,即可以同时并发上传多少个文件。0代表跟从配置文件设置(取值范围:1 ~ 10)", + Value: 0, + }, + cli.IntFlag{ + Name: "ubs", + Usage: "upload block size,上传分片大小,单位KB。推荐值:1024 ~ 10240", + Value: 10240, + }, + }, }, }, }