2016-08-05 16:12:27 +00:00
package move
import (
2019-06-17 08:34:30 +00:00
"context"
2019-07-28 17:47:38 +00:00
"github.com/rclone/rclone/cmd"
"github.com/rclone/rclone/fs/operations"
"github.com/rclone/rclone/fs/sync"
2016-08-05 16:12:27 +00:00
"github.com/spf13/cobra"
)
2017-11-27 11:42:02 +00:00
// Globals
var (
deleteEmptySrcDirs = false
2019-03-06 08:43:46 +00:00
createEmptySrcDirs = false
2017-11-27 11:42:02 +00:00
)
2016-08-05 16:12:27 +00:00
func init ( ) {
2019-10-11 15:58:11 +00:00
cmd . Root . AddCommand ( commandDefinition )
commandDefinition . Flags ( ) . BoolVarP ( & deleteEmptySrcDirs , "delete-empty-src-dirs" , "" , deleteEmptySrcDirs , "Delete empty source dirs after move" )
commandDefinition . Flags ( ) . BoolVarP ( & createEmptySrcDirs , "create-empty-src-dirs" , "" , createEmptySrcDirs , "Create empty source dirs on destination after move" )
2016-08-05 16:12:27 +00:00
}
2019-10-11 15:58:11 +00:00
var commandDefinition = & cobra . Command {
2016-08-05 16:12:27 +00:00
Use : "move source:path dest:path" ,
Short : ` Move files from source to dest. ` ,
Long : `
Moves the contents of the source directory to the destination
2016-10-22 16:53:52 +00:00
directory . Rclone will error if the source and destination overlap and
the remote does not support a server side directory move operation .
2016-08-05 16:12:27 +00:00
If no filters are in use and if possible this will server side move
2016-10-23 16:34:17 +00:00
` + " ` source : path ` " + ` into ` + " ` dest : path ` " + ` . After this ` + " ` source : path ` " + ` will no
2016-08-05 16:12:27 +00:00
longer longer exist .
2016-10-23 16:34:17 +00:00
Otherwise for each file in ` + " ` source : path ` " + ` selected by the filters ( if
any ) this will move it into ` + " ` dest : path ` " + ` . If possible a server side
2016-08-05 16:12:27 +00:00
move will be used , otherwise it will copy it ( server side if possible )
2016-10-23 16:34:17 +00:00
into ` + " ` dest : path ` " + ` then delete the original ( if no errors on copy ) in
` + " ` source : path ` " + ` .
2016-08-05 16:12:27 +00:00
2017-11-27 11:42:02 +00:00
If you want to delete empty source directories after move , use the -- delete - empty - src - dirs flag .
2018-11-25 16:49:38 +00:00
See the [ -- no - traverse ] ( / docs / # no - traverse ) option for controlling
whether rclone lists the destination directory or not . Supplying this
option when moving a small number of files into a large destination
can speed transfers up greatly .
2016-08-05 16:12:27 +00:00
* * Important * * : Since this can cause data loss , test first with the
-- dry - run flag .
2018-10-21 09:51:41 +00:00
* * Note * * : Use the ` + " ` - P ` " + ` / ` + " ` -- progress ` " + ` flag to view real - time transfer statistics .
2016-08-05 16:12:27 +00:00
` ,
Run : func ( command * cobra . Command , args [ ] string ) {
cmd . CheckArgs ( 2 , 2 , command , args )
2018-05-07 17:13:17 +00:00
fsrc , srcFileName , fdst := cmd . NewFsSrcFileDst ( args )
2016-12-04 16:52:24 +00:00
cmd . Run ( true , true , command , func ( ) error {
2018-05-07 17:13:17 +00:00
if srcFileName == "" {
2019-06-17 08:34:30 +00:00
return sync . MoveDir ( context . Background ( ) , fdst , fsrc , deleteEmptySrcDirs , createEmptySrcDirs )
2018-05-07 17:13:17 +00:00
}
2019-06-17 08:34:30 +00:00
return operations . MoveFile ( context . Background ( ) , fdst , fsrc , srcFileName , srcFileName )
2016-08-05 16:12:27 +00:00
} )
} ,
}