2016-08-05 18:12:27 +02:00
package sync
import (
2019-06-17 10:34:30 +02:00
"context"
2016-08-05 18:12:27 +02:00
"github.com/ncw/rclone/cmd"
2019-06-23 05:50:09 +02:00
"github.com/ncw/rclone/fs/operations"
2018-01-12 17:30:54 +01:00
"github.com/ncw/rclone/fs/sync"
2016-08-05 18:12:27 +02:00
"github.com/spf13/cobra"
)
2019-03-06 09:43:46 +01:00
var (
createEmptySrcDirs = false
)
2016-08-05 18:12:27 +02:00
func init ( ) {
2016-10-22 13:05:45 +02:00
cmd . Root . AddCommand ( commandDefintion )
2019-03-06 09:43:46 +01:00
commandDefintion . Flags ( ) . BoolVarP ( & createEmptySrcDirs , "create-empty-src-dirs" , "" , createEmptySrcDirs , "Create empty source dirs on destination after sync" )
2016-08-05 18:12:27 +02:00
}
2016-10-22 13:05:45 +02:00
var commandDefintion = & cobra . Command {
2016-08-05 18:12:27 +02:00
Use : "sync source:path dest:path" ,
Short : ` Make source and dest identical, modifying destination only. ` ,
Long : `
Sync the source to the destination , changing the destination
only . Doesn ' t transfer unchanged files , testing by size and
modification time or MD5SUM . Destination is updated to match
source , including deleting files if necessary .
* * Important * * : Since this can cause data loss , test first with the
` + " ` " + `--dry-run` + " ` " + ` flag to see exactly what would be copied and deleted .
Note that files in the destination won ' t be deleted if there were any
errors at any point .
It is always the contents of the directory that is synced , not the
directory so when source : path is a directory , it ' s the contents of
source : path that are copied , not the directory name and contents . See
extended explanation in the ` + " ` " + `copy` + " ` " + ` command above if unsure .
If dest : path doesn ' t exist , it is created and the source : path contents
go there .
2018-10-21 11:51:41 +02:00
* * Note * * : Use the ` + " ` - P ` " + ` / ` + " ` -- progress ` " + ` flag to view real - time transfer statistics
2016-08-05 18:12:27 +02:00
` ,
Run : func ( command * cobra . Command , args [ ] string ) {
cmd . CheckArgs ( 2 , 2 , command , args )
2019-06-23 05:50:09 +02:00
fsrc , srcFileName , fdst := cmd . NewFsSrcFileDst ( args )
2016-12-04 17:52:24 +01:00
cmd . Run ( true , true , command , func ( ) error {
2019-06-23 05:50:09 +02:00
if srcFileName == "" {
return sync . Sync ( context . Background ( ) , fdst , fsrc , createEmptySrcDirs )
}
return operations . CopyFile ( context . Background ( ) , fdst , fsrc , srcFileName , srcFileName )
2016-08-05 18:12:27 +02:00
} )
} ,
}