func TestLsLong(t *testing.T) { r := NewRun(t) defer r.Finalise() file1 := r.WriteBoth("potato2", "------------------------------------------------------------", t1) file2 := r.WriteBoth("empty space", "", t2) fstest.CheckItems(t, r.fremote, file1, file2) var buf bytes.Buffer err := fs.ListLong(r.fremote, &buf) if err != nil { t.Fatalf("List failed: %v", err) } res := buf.String() lines := strings.Split(strings.Trim(res, "\n"), "\n") if len(lines) != 2 { t.Fatalf("Wrong number of lines in list: %q", lines) } timeFormat := "2006-01-02 15:04:05.000000000" precision := r.fremote.Precision() location := time.Now().Location() checkTime := func(m, filename string, expected time.Time) { modTime, err := time.ParseInLocation(timeFormat, m, location) // parse as localtime if err != nil { t.Errorf("Error parsing %q: %v", m, err) } else { dt, ok := fstest.CheckTimeEqualWithPrecision(expected, modTime, precision) if !ok { t.Errorf("%s: Modification time difference too big |%s| > %s (%s vs %s) (precision %s)", filename, dt, precision, modTime, expected, precision) } } } m1 := regexp.MustCompile(`(?m)^ 0 (\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{9}) empty space$`) if ms := m1.FindStringSubmatch(res); ms == nil { t.Errorf("empty space missing: %q", res) } else { checkTime(ms[1], "empty space", t2.Local()) } m2 := regexp.MustCompile(`(?m)^ 60 (\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{9}) potato2$`) if ms := m2.FindStringSubmatch(res); ms == nil { t.Errorf("potato2 missing: %q", res) } else { checkTime(ms[1], "potato2", t1.Local()) } }
err := fs.ListDir(fdst, os.Stdout) if err != nil { log.Fatalf("Failed to listdir: %v", err) } }, MinArgs: 1, MaxArgs: 1, }, { Name: "lsl", ArgsHelp: "[remote:path]", Help: ` List all the objects in the the path with modification time, size and path.`, Run: func(fdst, fsrc fs.Fs) { err := fs.ListLong(fdst, os.Stdout) if err != nil { log.Fatalf("Failed to list long: %v", err) } }, MinArgs: 1, MaxArgs: 1, }, { Name: "md5sum", ArgsHelp: "[remote:path]", Help: ` Produces an md5sum file for all the objects in the path. This is in the same format as the standard md5sum tool produces.`, Run: func(fdst, fsrc fs.Fs) { err := fs.Md5sum(fdst, os.Stdout)
Help: ` List all directories/containers/buckets in the the path.`, Run: func(fdst, fsrc fs.Fs) error { return fs.ListDir(fdst, os.Stdout) }, MinArgs: 1, MaxArgs: 1, }, { Name: "lsl", ArgsHelp: "[remote:path]", Help: ` List all the objects in the the path with modification time, size and path.`, Run: func(fdst, fsrc fs.Fs) error { return fs.ListLong(fdst, os.Stdout) }, MinArgs: 1, MaxArgs: 1, }, { Name: "md5sum", ArgsHelp: "[remote:path]", Help: ` Produces an md5sum file for all the objects in the path. This is in the same format as the standard md5sum tool produces.`, Run: func(fdst, fsrc fs.Fs) error { return fs.Md5sum(fdst, os.Stdout) }, MinArgs: 1, MaxArgs: 1,
package lsl import ( "os" "github.com/ncw/rclone/cmd" "github.com/ncw/rclone/fs" "github.com/spf13/cobra" ) func init() { cmd.Root.AddCommand(commandDefintion) } var commandDefintion = &cobra.Command{ Use: "lsl remote:path", Short: `List all the objects path with modification time, size and path.`, Run: func(command *cobra.Command, args []string) { cmd.CheckArgs(1, 1, command, args) fsrc := cmd.NewFsSrc(args) cmd.Run(false, false, command, func() error { return fs.ListLong(fsrc, os.Stdout) }) }, }