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  }