aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2021-07-21 11:08:43 -0700
committerGitHub <noreply@github.com>2021-07-21 11:08:43 -0700
commit67537ff05be4840bc66359098ef0ed0e09265d26 (patch)
treeb79d1c3446c491e4600f666069386f930d3db6bd
parent70effac0d3edc95e55aa0c6d70e9d35a259ca2c8 (diff)
parent41d559f54e2d235698091c360cfc899db58ccc9e (diff)
downloadseaweedfs-67537ff05be4840bc66359098ef0ed0e09265d26.tar.xz
seaweedfs-67537ff05be4840bc66359098ef0ed0e09265d26.zip
Merge pull request #2208 from combineads/add_rm_options
-rw-r--r--weed/shell/command_fs_rm.go93
1 files changed, 63 insertions, 30 deletions
diff --git a/weed/shell/command_fs_rm.go b/weed/shell/command_fs_rm.go
index 4ee96ecf0..b383366ca 100644
--- a/weed/shell/command_fs_rm.go
+++ b/weed/shell/command_fs_rm.go
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io"
+ "strings"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/util"
@@ -21,47 +22,79 @@ func (c *commandFsRm) Name() string {
}
func (c *commandFsRm) Help() string {
- return `remove a file or a folder, recursively delete all files and folders
+ return `remove file and directory entries
- fs.rm <entry1>
+ fs.rm [-rf] <entry1> <entry2> ...
- fs.rm /dir/file_name
+ fs.rm /dir/file_name1 dir/file_name2
fs.rm /dir
+
+ The option "-r" can be recursive.
+ The option "-f" can be ignored by recursive error.
`
}
func (c *commandFsRm) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
-
- if len(args) != 1 {
- return fmt.Errorf("need to have arguments")
+ isRecursive := false
+ ignoreRecursiveError := false
+ var entiries []string
+ for _, arg := range args {
+ if !strings.HasPrefix(arg, "-") {
+ entiries = append(entiries, arg)
+ continue
+ }
+ for _, t := range arg {
+ switch t {
+ case 'r':
+ isRecursive = true
+ case 'f':
+ ignoreRecursiveError = true
+ }
+ }
}
-
- targetPath, err := commandEnv.parseUrl(args[0])
- if err != nil {
- return err
+ if len(entiries) < 1 {
+ return fmt.Errorf("need to have arguments")
}
- targetDir, targetName := util.FullPath(targetPath).DirAndName()
-
- return commandEnv.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
-
- request := &filer_pb.DeleteEntryRequest{
- Directory: targetDir,
- Name: targetName,
- IgnoreRecursiveError: true,
- IsDeleteData: true,
- IsRecursive: true,
- IsFromOtherCluster: false,
- Signatures: nil,
- }
- _, err = client.DeleteEntry(context.Background(), request)
-
- if err == nil {
- fmt.Fprintf(writer, "remove: %s\n", targetPath)
+ commandEnv.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
+ for _, entry := range entiries {
+ targetPath, err := commandEnv.parseUrl(entry)
+ if err != nil {
+ fmt.Fprintf(writer, "rm: %s: %v\n", targetPath, err)
+ continue
+ }
+
+ targetDir, targetName := util.FullPath(targetPath).DirAndName()
+
+ lookupRequest := &filer_pb.LookupDirectoryEntryRequest{
+ Directory: targetDir,
+ Name: targetName,
+ }
+ _, err = filer_pb.LookupEntry(client, lookupRequest)
+ if err != nil {
+ fmt.Fprintf(writer, "rm: %s: %v\n", targetPath, err)
+ continue
+ }
+
+ request := &filer_pb.DeleteEntryRequest{
+ Directory: targetDir,
+ Name: targetName,
+ IgnoreRecursiveError: ignoreRecursiveError,
+ IsDeleteData: true,
+ IsRecursive: isRecursive,
+ IsFromOtherCluster: false,
+ Signatures: nil,
+ }
+ if resp, err := client.DeleteEntry(context.Background(), request); err != nil {
+ fmt.Fprintf(writer, "rm: %s: %v\n", targetPath, err)
+ } else {
+ if resp.Error != "" {
+ fmt.Fprintf(writer, "rm: %s: %v\n", targetPath, resp.Error)
+ }
+ }
}
-
- return err
-
+ return nil
})
+ return
}