123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package shell
- import (
- "context"
- "fmt"
- "io"
- "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
- "github.com/chrislusf/seaweedfs/weed/util"
- )
- func init() {
- Commands = append(Commands, &commandFsMv{})
- }
- type commandFsMv struct {
- }
- func (c *commandFsMv) Name() string {
- return "fs.mv"
- }
- func (c *commandFsMv) Help() string {
- return `move or rename a file or a folder
- fs.mv <source entry> <destination entry>
- fs.mv /dir/file_name /dir2/filename2
- fs.mv /dir/file_name /dir2
- fs.mv /dir/dir2 /dir3/dir4/
- fs.mv /dir/dir2 /dir3/new_dir
- `
- }
- func (c *commandFsMv) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
- sourcePath, err := commandEnv.parseUrl(args[0])
- if err != nil {
- return err
- }
- destinationPath, err := commandEnv.parseUrl(args[1])
- if err != nil {
- return err
- }
- sourceDir, sourceName := util.FullPath(sourcePath).DirAndName()
- destinationDir, destinationName := util.FullPath(destinationPath).DirAndName()
- return commandEnv.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
- // collect destination entry info
- destinationRequest := &filer_pb.LookupDirectoryEntryRequest{
- Name: destinationDir,
- Directory: destinationName,
- }
- respDestinationLookupEntry, err := filer_pb.LookupEntry(client, destinationRequest)
- var targetDir, targetName string
- // moving a file or folder
- if err == nil && respDestinationLookupEntry.Entry.IsDirectory {
- // to a directory
- targetDir = util.Join(destinationDir, destinationName)
- targetName = sourceName
- } else {
- // to a file or folder
- targetDir = destinationDir
- targetName = destinationName
- }
- request := &filer_pb.AtomicRenameEntryRequest{
- OldDirectory: sourceDir,
- OldName: sourceName,
- NewDirectory: targetDir,
- NewName: targetName,
- }
- _, err = client.AtomicRenameEntry(context.Background(), request)
- fmt.Fprintf(writer, "move: %s => %s\n", sourcePath, util.NewFullPath(targetDir, targetName))
- return err
- })
- }
|