github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/filter/filterflags/filterflags.go (about) 1 // Package filterflags implements command line flags to set up a filter 2 package filterflags 3 4 import ( 5 "context" 6 "fmt" 7 8 "github.com/rclone/rclone/fs/config/flags" 9 "github.com/rclone/rclone/fs/filter" 10 "github.com/rclone/rclone/fs/rc" 11 "github.com/spf13/pflag" 12 ) 13 14 // Options set by command line flags 15 var ( 16 Opt = filter.DefaultOpt 17 ) 18 19 // Reload the filters from the flags 20 func Reload(ctx context.Context) (err error) { 21 fi := filter.GetConfig(ctx) 22 newFilter, err := filter.NewFilter(&Opt) 23 if err != nil { 24 return err 25 } 26 *fi = *newFilter 27 return nil 28 } 29 30 // AddRuleFlags add a set of rules flags with prefix 31 func AddRuleFlags(flagSet *pflag.FlagSet, Opt *filter.RulesOpt, what, prefix string) { 32 shortFilter := "" 33 if prefix == "" { 34 shortFilter = "f" 35 } 36 group := "Filter" 37 if prefix == "metadata-" { 38 group += ",Metadata" 39 } 40 flags.StringArrayVarP(flagSet, &Opt.FilterRule, prefix+"filter", shortFilter, nil, fmt.Sprintf("Add a %s filtering rule", what), group) 41 flags.StringArrayVarP(flagSet, &Opt.FilterFrom, prefix+"filter-from", "", nil, fmt.Sprintf("Read %s filtering patterns from a file (use - to read from stdin)", what), group) 42 flags.StringArrayVarP(flagSet, &Opt.ExcludeRule, prefix+"exclude", "", nil, fmt.Sprintf("Exclude %ss matching pattern", what), group) 43 flags.StringArrayVarP(flagSet, &Opt.ExcludeFrom, prefix+"exclude-from", "", nil, fmt.Sprintf("Read %s exclude patterns from file (use - to read from stdin)", what), group) 44 flags.StringArrayVarP(flagSet, &Opt.IncludeRule, prefix+"include", "", nil, fmt.Sprintf("Include %ss matching pattern", what), group) 45 flags.StringArrayVarP(flagSet, &Opt.IncludeFrom, prefix+"include-from", "", nil, fmt.Sprintf("Read %s include patterns from file (use - to read from stdin)", what), group) 46 } 47 48 // AddFlags adds the non filing system specific flags to the command 49 func AddFlags(flagSet *pflag.FlagSet) { 50 rc.AddOptionReload("filter", &Opt, Reload) 51 flags.BoolVarP(flagSet, &Opt.DeleteExcluded, "delete-excluded", "", false, "Delete files on dest excluded from sync", "Filter") 52 AddRuleFlags(flagSet, &Opt.RulesOpt, "file", "") 53 AddRuleFlags(flagSet, &Opt.MetaRules, "metadata", "metadata-") 54 flags.StringArrayVarP(flagSet, &Opt.ExcludeFile, "exclude-if-present", "", nil, "Exclude directories if filename is present", "Filter") 55 flags.StringArrayVarP(flagSet, &Opt.FilesFrom, "files-from", "", nil, "Read list of source-file names from file (use - to read from stdin)", "Filter") 56 flags.StringArrayVarP(flagSet, &Opt.FilesFromRaw, "files-from-raw", "", nil, "Read list of source-file names from file without any processing of lines (use - to read from stdin)", "Filter") 57 flags.FVarP(flagSet, &Opt.MinAge, "min-age", "", "Only transfer files older than this in s or suffix ms|s|m|h|d|w|M|y", "Filter") 58 flags.FVarP(flagSet, &Opt.MaxAge, "max-age", "", "Only transfer files younger than this in s or suffix ms|s|m|h|d|w|M|y", "Filter") 59 flags.FVarP(flagSet, &Opt.MinSize, "min-size", "", "Only transfer files bigger than this in KiB or suffix B|K|M|G|T|P", "Filter") 60 flags.FVarP(flagSet, &Opt.MaxSize, "max-size", "", "Only transfer files smaller than this in KiB or suffix B|K|M|G|T|P", "Filter") 61 flags.BoolVarP(flagSet, &Opt.IgnoreCase, "ignore-case", "", false, "Ignore case in filters (case insensitive)", "Filter") 62 //cvsExclude = BoolP("cvs-exclude", "C", false, "Exclude files in the same way CVS does") 63 }