lsd: Add -R flag and fix and update docs for all ls commands

This commit is contained in:
Nick Craig-Wood 2018-04-25 21:06:42 +01:00
parent d0f32b62fd
commit 96a62d55a2
5 changed files with 87 additions and 4 deletions

View file

@ -19,6 +19,15 @@ var commandDefintion = &cobra.Command{
Long: ` Long: `
Lists the objects in the source path to standard output in a human Lists the objects in the source path to standard output in a human
readable format with size and path. Recurses by default. readable format with size and path. Recurses by default.
Eg
$ rclone ls swift:bucket
60295 bevajer5jef
90613 canole
94467 diwogej7
37600 fubuwic
` + lshelp.Help, ` + lshelp.Help,
Run: func(command *cobra.Command, args []string) { Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args) cmd.CheckArgs(1, 1, command, args)

View file

@ -16,9 +16,9 @@ There are several related list commands
` + "`lsf`" + ` is designed to be human and machine readable. ` + "`lsf`" + ` is designed to be human and machine readable.
` + "`lsjson`" + ` is designed to be machine readable. ` + "`lsjson`" + ` is designed to be machine readable.
Note that ` + "`ls`,`lsl`,`lsd`" + ` all recurse by default - use "--max-depth 1" to stop the recursion. Note that ` + "`ls` and `lsl`" + ` recurse by default - use "--max-depth 1" to stop the recursion.
The other list commands ` + "`lsf`,`lsjson`" + ` do not recurse by default - use "-R" to make them recurse. The other list commands ` + "`lsd`,`lsf`,`lsjson`" + ` do not recurse by default - use "-R" to make them recurse.
Listing a non existent directory will produce an error except for Listing a non existent directory will produce an error except for
remotes which can't have empty directories (eg s3, swift, gcs, etc - remotes which can't have empty directories (eg s3, swift, gcs, etc -

View file

@ -5,23 +5,51 @@ import (
"github.com/ncw/rclone/cmd" "github.com/ncw/rclone/cmd"
"github.com/ncw/rclone/cmd/ls/lshelp" "github.com/ncw/rclone/cmd/ls/lshelp"
"github.com/ncw/rclone/fs"
"github.com/ncw/rclone/fs/operations" "github.com/ncw/rclone/fs/operations"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var (
recurse bool
)
func init() { func init() {
cmd.Root.AddCommand(commandDefintion) cmd.Root.AddCommand(commandDefintion)
commandDefintion.Flags().BoolVarP(&recurse, "recursive", "R", false, "Recurse into the listing.")
} }
var commandDefintion = &cobra.Command{ var commandDefintion = &cobra.Command{
Use: "lsd remote:path", Use: "lsd remote:path",
Short: `List all directories/containers/buckets in the path.`, Short: `List all directories/containers/buckets in the path.`,
Long: ` Long: `
Lists the directories in the source path to standard output. Recurses Lists the directories in the source path to standard output. Does not
by default. recurse by default. Use the -R flag to recurse.
This command lists the total size of the directory (if known, -1 if
not), the modification time (if known, the current time if not), the
number of objects in the directory (if known, -1 if not) and the name
of the directory, Eg
$ rclone lsd swift:
494000 2018-04-26 08:43:20 10000 10000files
65 2018-04-26 08:43:20 1 1File
Or
$ rclone lsd drive:test
-1 2016-10-17 17:41:53 -1 1000files
-1 2017-01-03 14:40:54 -1 2500files
-1 2017-07-08 14:39:28 -1 4000files
If you just want the directory names use "rclone lsf --dirs-only".
` + lshelp.Help, ` + lshelp.Help,
Run: func(command *cobra.Command, args []string) { Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args) cmd.CheckArgs(1, 1, command, args)
if recurse {
fs.Config.MaxDepth = 0
}
fsrc := cmd.NewFsSrc(args) fsrc := cmd.NewFsSrc(args)
cmd.Run(false, false, command, func() error { cmd.Run(false, false, command, func() error {
return operations.ListDir(fsrc, os.Stdout) return operations.ListDir(fsrc, os.Stdout)

View file

@ -46,6 +46,15 @@ standard output in a form which is easy to parse by scripts. By
default this will just be the names of the objects and directories, default this will just be the names of the objects and directories,
one per line. The directories will have a / suffix. one per line. The directories will have a / suffix.
Eg
$ rclone lsf swift:bucket
bevajer5jef
canole
diwogej7
ferejej3gux/
fubuwic
Use the --format option to control what gets listed. By default this Use the --format option to control what gets listed. By default this
is just the path, but you can use these parameters to control the is just the path, but you can use these parameters to control the
output: output:
@ -58,6 +67,15 @@ output:
So if you wanted the path, size and modification time, you would use So if you wanted the path, size and modification time, you would use
--format "pst", or maybe --format "tsp" to put the path last. --format "pst", or maybe --format "tsp" to put the path last.
Eg
$ rclone lsf --format "tsp" swift:bucket
2016-06-25 18:55:41;60295;bevajer5jef
2016-06-25 18:55:43;90613;canole
2016-06-25 18:55:43;94467;diwogej7
2018-04-26 08:50:45;0;ferejej3gux/
2016-06-25 18:55:40;37600;fubuwic
If you specify "h" in the format you will get the MD5 hash by default, If you specify "h" in the format you will get the MD5 hash by default,
use the "--hash" flag to change which hash you want. Note that this use the "--hash" flag to change which hash you want. Note that this
can be returned as an empty string if it isn't available on the object can be returned as an empty string if it isn't available on the object
@ -69,11 +87,30 @@ For example to emulate the md5sum command you can use
rclone lsf -R --hash MD5 --format hp --separator " " --files-only . rclone lsf -R --hash MD5 --format hp --separator " " --files-only .
Eg
$ rclone lsf -R --hash MD5 --format hp --separator " " --files-only swift:bucket
7908e352297f0f530b84a756f188baa3 bevajer5jef
cd65ac234e6fea5925974a51cdd865cc canole
03b5341b4f234b9d984d03ad076bae91 diwogej7
8fd37c3810dd660778137ac3a66cc06d fubuwic
99713e14a4c4ff553acaf1930fad985b gixacuh7ku
(Though "rclone md5sum ." is an easier way of typing this.) (Though "rclone md5sum ." is an easier way of typing this.)
By default the separator is ";" this can be changed with the By default the separator is ";" this can be changed with the
--separator flag. Note that separators aren't escaped in the path so --separator flag. Note that separators aren't escaped in the path so
putting it last is a good strategy. putting it last is a good strategy.
Eg
$ rclone lsf --separator "," --format "tshp" swift:bucket
2016-06-25 18:55:41,60295,7908e352297f0f530b84a756f188baa3,bevajer5jef
2016-06-25 18:55:43,90613,cd65ac234e6fea5925974a51cdd865cc,canole
2016-06-25 18:55:43,94467,03b5341b4f234b9d984d03ad076bae91,diwogej7
2018-04-26 08:52:53,0,,ferejej3gux/
2016-06-25 18:55:40,37600,8fd37c3810dd660778137ac3a66cc06d,fubuwic
` + lshelp.Help, ` + lshelp.Help,
Run: func(command *cobra.Command, args []string) { Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args) cmd.CheckArgs(1, 1, command, args)

View file

@ -19,6 +19,15 @@ var commandDefintion = &cobra.Command{
Long: ` Long: `
Lists the objects in the source path to standard output in a human Lists the objects in the source path to standard output in a human
readable format with modification time, size and path. Recurses by default. readable format with modification time, size and path. Recurses by default.
Eg
$ rclone lsl swift:bucket
60295 2016-06-25 18:55:41.062626927 bevajer5jef
90613 2016-06-25 18:55:43.302607074 canole
94467 2016-06-25 18:55:43.046609333 diwogej7
37600 2016-06-25 18:55:40.814629136 fubuwic
` + lshelp.Help, ` + lshelp.Help,
Run: func(command *cobra.Command, args []string) { Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args) cmd.CheckArgs(1, 1, command, args)