mirror of
https://github.com/rclone/rclone
synced 2024-12-23 14:23:44 +01:00
lsjson: added --files-only and --dirs-only flags
Factored common code from lsf/lsjson into operations.ListJSON
This commit is contained in:
parent
120de505a9
commit
5855714474
@ -164,6 +164,8 @@ func Lsf(fsrc fs.Fs, out io.Writer) error {
|
||||
list.SetAbsolute(absolute)
|
||||
var opt = operations.ListJSONOpt{
|
||||
NoModTime: true,
|
||||
DirsOnly: dirsOnly,
|
||||
FilesOnly: filesOnly,
|
||||
Recurse: recurse,
|
||||
}
|
||||
|
||||
@ -195,15 +197,6 @@ func Lsf(fsrc fs.Fs, out io.Writer) error {
|
||||
}
|
||||
|
||||
return operations.ListJSON(fsrc, "", &opt, func(item *operations.ListJSONItem) error {
|
||||
if item.IsDir {
|
||||
if filesOnly {
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
if dirsOnly {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
_, _ = fmt.Fprintln(out, list.Format(item))
|
||||
return nil
|
||||
})
|
||||
|
@ -23,6 +23,8 @@ func init() {
|
||||
commandDefintion.Flags().BoolVarP(&opt.NoModTime, "no-modtime", "", false, "Don't read the modification time (can speed things up).")
|
||||
commandDefintion.Flags().BoolVarP(&opt.ShowEncrypted, "encrypted", "M", false, "Show the encrypted names.")
|
||||
commandDefintion.Flags().BoolVarP(&opt.ShowOrigIDs, "original", "", false, "Show the ID of the underlying Object.")
|
||||
commandDefintion.Flags().BoolVarP(&opt.FilesOnly, "files-only", "", false, "Show only files in the listing.")
|
||||
commandDefintion.Flags().BoolVarP(&opt.DirsOnly, "dirs-only", "", false, "Show only directories in the listing.")
|
||||
}
|
||||
|
||||
var commandDefintion = &cobra.Command{
|
||||
@ -55,6 +57,10 @@ If --no-modtime is specified then ModTime will be blank.
|
||||
|
||||
If --encrypted is not specified the Encrypted won't be emitted.
|
||||
|
||||
If --dirs-only is not specified files in addition to directories are returned
|
||||
|
||||
If --files-only is not specified directories in addition to the files will be returned.
|
||||
|
||||
The Path field will only show folders below the remote path being listed.
|
||||
If "remote:path" contains the file "subfolder/file.txt", the Path for "file.txt"
|
||||
will be "subfolder/file.txt", not "remote:path/subfolder/file.txt".
|
||||
|
@ -70,6 +70,8 @@ type ListJSONOpt struct {
|
||||
ShowEncrypted bool `json:"showEncrypted"`
|
||||
ShowOrigIDs bool `json:"showOrigIDs"`
|
||||
ShowHash bool `json:"showHash"`
|
||||
DirsOnly bool `json:"dirsOnly"`
|
||||
FilesOnly bool `json:"filesOnly"`
|
||||
}
|
||||
|
||||
// ListJSON lists fsrc using the options in opt calling callback for each item
|
||||
@ -91,6 +93,19 @@ func ListJSON(fsrc fs.Fs, remote string, opt *ListJSONOpt, callback func(*ListJS
|
||||
format := formatForPrecision(fsrc.Precision())
|
||||
err := walk.ListR(fsrc, remote, false, ConfigMaxDepth(opt.Recurse), walk.ListAll, func(entries fs.DirEntries) (err error) {
|
||||
for _, entry := range entries {
|
||||
switch entry.(type) {
|
||||
case fs.Directory:
|
||||
if opt.FilesOnly {
|
||||
continue
|
||||
}
|
||||
case fs.Object:
|
||||
if opt.DirsOnly {
|
||||
continue
|
||||
}
|
||||
default:
|
||||
fs.Errorf(nil, "Unknown type %T in listing", entry)
|
||||
}
|
||||
|
||||
item := ListJSONItem{
|
||||
Path: entry.Remote(),
|
||||
Name: path.Base(entry.Remote()),
|
||||
|
Loading…
Reference in New Issue
Block a user