1package sync 2 3import ( 4 "context" 5 6 "github.com/rclone/rclone/fs/rc" 7) 8 9func init() { 10 for _, name := range []string{"sync", "copy", "move"} { 11 name := name 12 moveHelp := "" 13 if name == "move" { 14 moveHelp = "- deleteEmptySrcDirs - delete empty src directories if set\n" 15 } 16 rc.Add(rc.Call{ 17 Path: "sync/" + name, 18 AuthRequired: true, 19 Fn: func(ctx context.Context, in rc.Params) (rc.Params, error) { 20 return rcSyncCopyMove(ctx, in, name) 21 }, 22 Title: name + " a directory from source remote to destination remote", 23 Help: `This takes the following parameters: 24 25- srcFs - a remote name string e.g. "drive:src" for the source 26- dstFs - a remote name string e.g. "drive:dst" for the destination 27- createEmptySrcDirs - create empty src directories on destination if set 28` + moveHelp + ` 29 30See the [` + name + ` command](/commands/rclone_` + name + `/) command for more information on the above.`, 31 }) 32 } 33} 34 35// Sync/Copy/Move a file 36func rcSyncCopyMove(ctx context.Context, in rc.Params, name string) (out rc.Params, err error) { 37 srcFs, err := rc.GetFsNamed(ctx, in, "srcFs") 38 if err != nil { 39 return nil, err 40 } 41 dstFs, err := rc.GetFsNamed(ctx, in, "dstFs") 42 if err != nil { 43 return nil, err 44 } 45 createEmptySrcDirs, err := in.GetBool("createEmptySrcDirs") 46 if rc.NotErrParamNotFound(err) { 47 return nil, err 48 } 49 switch name { 50 case "sync": 51 return nil, Sync(ctx, dstFs, srcFs, createEmptySrcDirs) 52 case "copy": 53 return nil, CopyDir(ctx, dstFs, srcFs, createEmptySrcDirs) 54 case "move": 55 deleteEmptySrcDirs, err := in.GetBool("deleteEmptySrcDirs") 56 if rc.NotErrParamNotFound(err) { 57 return nil, err 58 } 59 return nil, MoveDir(ctx, dstFs, srcFs, deleteEmptySrcDirs, createEmptySrcDirs) 60 } 61 panic("unknown rcSyncCopyMove type") 62} 63