diff --git a/src/cli.rs b/src/cli.rs index 84abe9d..8e97f1c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -29,14 +29,15 @@ use crate::filter::SizeFilter; "max_results", "has_results", "count"])), )] pub struct Opts { - /// Search hidden files and directories + /// Include hidden directories and files in the search results (default: + /// hidden files and directories are skipped). Files and directories are + /// considered to be hidden if their name starts with a `.` sign (dot). + /// The flag can be overridden with --no-hidden. #[arg( long, short = 'H', - long_help = "Include hidden directories and files in the search results (default: \ - hidden files and directories are skipped). Files and directories are \ - considered to be hidden if their name starts with a `.` sign (dot). \ - The flag can be overridden with --no-hidden." + help = "Search hidden files and directories", + long_help )] pub hidden: bool, @@ -44,13 +45,14 @@ pub struct Opts { #[arg(long, overrides_with = "hidden", hide = true, action = ArgAction::SetTrue)] no_hidden: (), - /// Do not respect .(git|fd)ignore files + /// Show search results from files and directories that would otherwise be + /// ignored by '.gitignore', '.ignore', '.fdignore', or the global ignore file. + /// The flag can be overridden with --ignore. #[arg( long, short = 'I', - long_help = "Show search results from files and directories that would otherwise be \ - ignored by '.gitignore', '.ignore', '.fdignore', or the global ignore file. \ - The flag can be overridden with --ignore." + help = "Do not respect .(git|fd)ignore files", + long_help )] pub no_ignore: bool, @@ -58,12 +60,13 @@ pub struct Opts { #[arg(long, overrides_with = "no_ignore", hide = true, action = ArgAction::SetTrue)] ignore: (), - /// Do not respect .gitignore files + ///Show search results from files and directories that would otherwise be + /// ignored by '.gitignore' files. The flag can be overridden with --ignore-vcs. #[arg( long, hide_short_help = true, - long_help = "Show search results from files and directories that would otherwise be \ - ignored by '.gitignore' files. The flag can be overridden with --ignore-vcs." + help = "Do not respect .gitignore files", + long_help )] pub no_ignore_vcs: bool, @@ -71,12 +74,13 @@ pub struct Opts { #[arg(long, overrides_with = "no_ignore_vcs", hide = true, action = ArgAction::SetTrue)] ignore_vcs: (), - /// Do not respect .(git|fd)ignore files in parent directories + /// Show search results from files and directories that would otherwise be + /// ignored by '.gitignore', '.ignore', or '.fdignore' files in parent directories. #[arg( long, hide_short_help = true, - long_help = "Show search results from files and directories that would otherwise be \ - ignored by '.gitignore', '.ignore', or '.fdignore' files in parent directories." + help = "Do not respect .(git|fd)ignore files in parent directories", + long_help )] pub no_ignore_parent: bool, @@ -84,10 +88,11 @@ pub struct Opts { #[arg(long, hide = true)] pub no_global_ignore_file: bool, - /// Unrestricted search, alias for '--no-ignore --hidden' + /// Perform an unrestricted search, including ignored and hidden files. This is + /// an alias for '--no-ignore --hidden'. #[arg(long = "unrestricted", short = 'u', overrides_with_all(&["ignore", "no_hidden"]), action(ArgAction::Count), hide_short_help = true, - long_help = "Perform an unrestricted search, including ignored and hidden files. This is \ - an alias for '--no-ignore --hidden'." + help = "Unrestricted search, alias for '--no-ignore --hidden'", + long_help, )] rg_alias_hidden_ignore: u8, @@ -102,66 +107,72 @@ pub struct Opts { )] pub case_sensitive: bool, - /// Case-insensitive search (default: smart case) + /// Perform a case-insensitive search. By default, fd uses case-insensitive + /// searches, unless the pattern contains an uppercase character (smart + /// case). #[arg( long, short = 'i', overrides_with("case_sensitive"), - long_help = "Perform a case-insensitive search. By default, fd uses case-insensitive \ - searches, unless the pattern contains an uppercase character (smart \ - case)." + help = "Case-insensitive search (default: smart case)", + long_help )] pub ignore_case: bool, - /// Glob-based search (default: regular expression) + /// Perform a glob-based search instead of a regular expression search. #[arg( long, short = 'g', conflicts_with("fixed_strings"), - long_help = "Perform a glob-based search instead of a regular expression search." + help = "Glob-based search (default: regular expression)", + long_help )] pub glob: bool, - /// Regular-expression based search (default) + /// Perform a regular-expression based search (default). This can be used to + /// override --glob. #[arg( long, overrides_with("glob"), hide_short_help = true, - long_help = "Perform a regular-expression based search (default). This can be used to \ - override --glob." + help = "Regular-expression based search (default)", + long_help )] pub regex: bool, - /// Treat pattern as literal string stead of regex + /// Treat the pattern as a literal string instead of a regular expression. Note + /// that this also performs substring comparison. If you want to match on an + /// exact filename, consider using '--glob'. #[arg( long, short = 'F', alias = "literal", hide_short_help = true, - long_help = "Treat the pattern as a literal string instead of a regular expression. Note \ - that this also performs substring comparison. If you want to match on an \ - exact filename, consider using '--glob'." + help = "Treat pattern as literal string stead of regex", + long_help )] pub fixed_strings: bool, - /// Additional search patterns that need to be matched + /// Add additional required search patterns, all of which must be matched. Multiple + /// additional patterns can be specified. The patterns are regular + /// expressions, unless '--glob' or '--fixed-strings' is used. #[arg( long = "and", value_name = "pattern", - long_help = "Add additional required search patterns, all of which must be matched. Multiple \ - additional patterns can be specified. The patterns are regular expressions, \ - unless '--glob' or '--fixed-strings' is used.", + help = "Additional search patterns that need to be matched", + long_help, hide_short_help = true, allow_hyphen_values = true )] pub exprs: Option>, - /// Show absolute instead of relative paths + /// Shows the full path starting from the root as opposed to relative paths. + /// The flag can be overridden with --relative-path. #[arg( long, short = 'a', - long_help = "Shows the full path starting from the root as opposed to relative paths. \ - The flag can be overridden with --relative-path." + help = "Show absolute instead of relative paths", + long_help )] pub absolute_path: bool, @@ -169,15 +180,16 @@ pub struct Opts { #[arg(long, overrides_with = "absolute_path", hide = true, action = ArgAction::SetTrue)] relative_path: (), - /// Use a long listing format with file metadata + /// Use a detailed listing format like 'ls -l'. This is basically an alias + /// for '--exec-batch ls -l' with some additional 'ls' options. This can be + /// used to see more metadata, to show symlink targets and to achieve a + /// deterministic sort order. #[arg( long, short = 'l', conflicts_with("absolute_path"), - long_help = "Use a detailed listing format like 'ls -l'. This is basically an alias \ - for '--exec-batch ls -l' with some additional 'ls' options. This can be \ - used to see more metadata, to show symlink targets and to achieve a \ - deterministic sort order." + help = "Use a long listing format with file metadata", + long_help )] pub list_details: bool, @@ -196,207 +208,230 @@ pub struct Opts { #[arg(long, overrides_with = "follow", hide = true, action = ArgAction::SetTrue)] no_follow: (), - /// Search full abs. path (default: filename only) + /// By default, the search pattern is only matched against the filename (or directory name). Using this flag, the pattern is matched against the full (absolute) path. Example: + /// fd --glob -p '**/.git/config' #[arg( long, short = 'p', - long_help = "By default, the search pattern is only matched against the filename (or \ - directory name). Using this flag, the pattern is matched against the full \ - (absolute) path. Example:\n \ - fd --glob -p '**/.git/config'" + help = "Search full abs. path (default: filename only)", + long_help, + verbatim_doc_comment )] pub full_path: bool, - /// Separate search results by the null character + /// Separate search results by the null character (instead of newlines). + /// Useful for piping results to 'xargs'. #[arg( long = "print0", short = '0', conflicts_with("list_details"), hide_short_help = true, - long_help = "Separate search results by the null character (instead of newlines). \ - Useful for piping results to 'xargs'." + help = "Separate search results by the null character", + long_help )] pub null_separator: bool, - /// Set maximum search depth (default: none) + /// Limit the directory traversal to a given depth. By default, there is no + /// limit on the search depth. #[arg( long, short = 'd', value_name = "depth", alias("maxdepth"), - long_help = "Limit the directory traversal to a given depth. By default, there is no \ - limit on the search depth." + help = "Set maximum search depth (default: none)", + long_help )] max_depth: Option, /// Only show search results starting at the given depth. + /// See also: '--max-depth' and '--exact-depth' #[arg( long, value_name = "depth", hide_short_help = true, - long_help = "Only show search results starting at the given depth. \ - See also: '--max-depth' and '--exact-depth'" + help = "Only show search results starting at the given depth.", + long_help )] min_depth: Option, - /// Only show search results at the exact given depth + /// Only show search results at the exact given depth. This is an alias for + /// '--min-depth --max-depth '. #[arg(long, value_name = "depth", hide_short_help = true, conflicts_with_all(&["max_depth", "min_depth"]), - long_help = "Only show search results at the exact given depth. This is an alias for \ - '--min-depth --max-depth '.", + help = "Only show search results at the exact given depth", + long_help, )] exact_depth: Option, - /// Exclude entries that match the given glob pattern + /// Exclude files/directories that match the given glob pattern. This + /// overrides any other ignore logic. Multiple exclude patterns can be + /// specified. + /// + /// Examples: + /// {n} --exclude '*.pyc' + /// {n} --exclude node_modules #[arg( long, short = 'E', value_name = "pattern", - long_help = "Exclude files/directories that match the given glob pattern. This \ - overrides any other ignore logic. Multiple exclude patterns can be \ - specified.\n\n\ - Examples:\n \ - --exclude '*.pyc'\n \ - --exclude node_modules" + help = "Exclude entries that match the given glob pattern", + long_help )] pub exclude: Vec, /// Do not traverse into directories that match the search criteria. If /// you want to exclude specific directories, use the '--exclude=…' option. #[arg(long, hide_short_help = true, conflicts_with_all(&["size", "exact_depth"]), - long_help = "Do not traverse into directories that match the search criteria. If \ - you want to exclude specific directories, use the '--exclude=…' option.", + long_help, )] pub prune: bool, - /// Filter by type: file (f), directory (d), symlink (l), - /// executable (x), empty (e), socket (s), pipe (p) + /// Filter the search by type: + /// {n} 'f' or 'file': regular files + /// {n} 'd' or 'directory': directories + /// {n} 'l' or 'symlink': symbolic links + /// {n} 's' or 'socket': socket + /// {n} 'p' or 'pipe': named pipe (FIFO) + /// {n}{n} 'x' or 'executable': executables + /// {n} 'e' or 'empty': empty files or directories + /// + /// This option can be specified more than once to include multiple file types. + /// Searching for '--type file --type symlink' will show both regular files as + /// well as symlinks. Note that the 'executable' and 'empty' filters work differently: + /// '--type executable' implies '--type file' by default. And '--type empty' searches + /// for empty files and directories, unless either '--type file' or '--type directory' + /// is specified in addition. + /// + /// Examples: + /// {n} - Only search for files: + /// {n} fd --type file … + /// {n} fd -tf … + /// {n} - Find both files and symlinks + /// {n} fd --type file --type symlink … + /// {n} fd -tf -tl … + /// {n} - Find executable files: + /// {n} fd --type executable + /// {n} fd -tx + /// {n} - Find empty files: + /// {n} fd --type empty --type file + /// {n} fd -te -tf + /// {n} - Find empty directories: + /// {n} fd --type empty --type directory + /// {n} fd -te -td #[arg( long = "type", short = 't', value_name = "filetype", hide_possible_values = true, value_enum, - long_help = "Filter the search by type:\n \ - 'f' or 'file': regular files\n \ - 'd' or 'directory': directories\n \ - 'l' or 'symlink': symbolic links\n \ - 's' or 'socket': socket\n \ - 'p' or 'pipe': named pipe (FIFO)\n\n \ - 'x' or 'executable': executables\n \ - 'e' or 'empty': empty files or directories\n\n\ - This option can be specified more than once to include multiple file types. \ - Searching for '--type file --type symlink' will show both regular files as \ - well as symlinks. Note that the 'executable' and 'empty' filters work differently: \ - '--type executable' implies '--type file' by default. And '--type empty' searches \ - for empty files and directories, unless either '--type file' or '--type directory' \ - is specified in addition.\n\n\ - Examples:\n \ - - Only search for files:\n \ - fd --type file …\n \ - fd -tf …\n \ - - Find both files and symlinks\n \ - fd --type file --type symlink …\n \ - fd -tf -tl …\n \ - - Find executable files:\n \ - fd --type executable\n \ - fd -tx\n \ - - Find empty files:\n \ - fd --type empty --type file\n \ - fd -te -tf\n \ - - Find empty directories:\n \ - fd --type empty --type directory\n \ - fd -te -td" + help = "Filter by type: file (f), directory (d), symlink (l), \ + executable (x), empty (e), socket (s), pipe (p)", + long_help )] pub filetype: Option>, - /// Filter by file extension + /// (Additionally) filter search results by their file extension. Multiple + /// allowable file extensions can be specified. + /// + /// If you want to search for files without extension, + /// you can use the regex '^[^.]+$' as a normal search pattern. #[arg( long = "extension", short = 'e', value_name = "ext", - long_help = "(Additionally) filter search results by their file extension. Multiple \ - allowable file extensions can be specified.\n\ - If you want to search for files without extension, \ - you can use the regex '^[^.]+$' as a normal search pattern." + help = "Filter by file extension", + long_help )] pub extensions: Option>, - /// Limit results based on the size of files + /// Limit results based on the size of files using the format <+->. + /// '+': file size must be greater than or equal to this + /// '-': file size must be less than or equal to this + /// + /// If neither '+' nor '-' is specified, file size must be exactly equal to this. + /// 'NUM': The numeric size (e.g. 500) + /// 'UNIT': The units for NUM. They are not case-sensitive. + /// Allowed unit values: + /// 'b': bytes + /// 'k': kilobytes (base ten, 10^3 = 1000 bytes) + /// 'm': megabytes + /// 'g': gigabytes + /// 't': terabytes + /// 'ki': kibibytes (base two, 2^10 = 1024 bytes) + /// 'mi': mebibytes + /// 'gi': gibibytes + /// 'ti': tebibytes #[arg(long, short = 'S', value_parser = SizeFilter::from_string, allow_hyphen_values = true, verbatim_doc_comment, value_name = "size", - long_help = "Limit results based on the size of files using the format <+->.\n \ - '+': file size must be greater than or equal to this\n \ - '-': file size must be less than or equal to this\n\ - If neither '+' nor '-' is specified, file size must be exactly equal to this.\n \ - 'NUM': The numeric size (e.g. 500)\n \ - 'UNIT': The units for NUM. They are not case-sensitive.\n\ - Allowed unit values:\n \ - 'b': bytes\n \ - 'k': kilobytes (base ten, 10^3 = 1000 bytes)\n \ - 'm': megabytes\n \ - 'g': gigabytes\n \ - 't': terabytes\n \ - 'ki': kibibytes (base two, 2^10 = 1024 bytes)\n \ - 'mi': mebibytes\n \ - 'gi': gibibytes\n \ - 'ti': tebibytes", + help = "Limit results based on the size of files", + long_help, + verbatim_doc_comment, )] pub size: Vec, - /// Filter by file modification time (newer than) + /// Filter results based on the file modification time. Files with modification times + /// greater than the argument are returned. The argument can be provided + /// as a specific point in time (YYYY-MM-DD HH:MM:SS) or as a duration (10h, 1d, 35min). + /// If the time is not specified, it defaults to 00:00:00. + /// '--change-newer-than', '--newer', or '--changed-after' can be used as aliases. + /// + /// Examples: + /// {n} --changed-within 2weeks + /// {n} --change-newer-than '2018-10-27 10:00:00' + /// {n} --newer 2018-10-27 + /// {n} --changed-after 1day #[arg( long, alias("change-newer-than"), alias("newer"), alias("changed-after"), value_name = "date|dur", - long_help = "Filter results based on the file modification time. \ - Files with modification times greater than the argument are returned. \ - The argument can be provided \ - as a specific point in time (YYYY-MM-DD HH:MM:SS) or as a duration (10h, 1d, 35min). \ - If the time is not specified, it defaults to 00:00:00. \ - '--change-newer-than' or '--newer' can be used as aliases.\n\ - Examples:\n \ - --changed-within 2weeks\n \ - --change-newer-than '2018-10-27 10:00:00'\n \ - --newer 2018-10-27" + help = "Filter by file modification time (newer than)", + long_help )] pub changed_within: Option, - /// Filter by file modification time (older than) + /// Filter results based on the file modification time. Files with modification times + /// less than the argument are returned. The argument can be provided + /// as a specific point in time (YYYY-MM-DD HH:MM:SS) or as a duration (10h, 1d, 35min). + /// '--change-older-than' or '--older' can be used as aliases. + /// + /// Examples: + /// {n} --changed-before '2018-10-27 10:00:00' + /// {n} --change-older-than 2weeks + /// {n} --older 2018-10-27 #[arg( long, alias("change-older-than"), alias("older"), value_name = "date|dur", - long_help = "Filter results based on the file modification time. \ - Files with modification times less than the argument are returned. \ - The argument can be provided \ - as a specific point in time (YYYY-MM-DD HH:MM:SS) or as a duration (10h, 1d, 35min). \ - '--change-older-than' or '--older' can be used as aliases.\n\ - Examples:\n \ - --changed-before '2018-10-27 10:00:00'\n \ - --change-older-than 2weeks\n \ - --older 2018-10-27" + help = "Filter by file modification time (older than)", + long_help )] pub changed_before: Option, - /// Filter by owning user and/or group + /// Filter files by their user and/or group. + /// Format: [(user|uid)][:(group|gid)]. Either side is optional. + /// Precede either side with a '!' to exclude files instead. + /// + /// Examples: + /// {n} --owner john + /// {n} --owner :students + /// {n} --owner '!john:students' #[cfg(unix)] #[arg(long, short = 'o', value_parser = OwnerFilter::from_string, value_name = "user:group", - long_help = "Filter files by their user and/or group. \ - Format: [(user|uid)][:(group|gid)]. Either side is optional. \ - Precede either side with a '!' to exclude files instead.\n\ - Examples:\n \ - --owner john\n \ - --owner :students\n \ - --owner '!john:students'" + help = "Filter by owning user and/or group", + long_help, )] pub owner: Option, #[command(flatten)] pub exec: Exec, - /// Max number of arguments to run as a batch size with -X + /// Maximum number of arguments to pass to the command given with -X. + /// If the number of results is greater than the given size, + /// the command given with -X is run again with remaining arguments. + /// A batch size of zero means there is no limit (default), but note + /// that batching might still happen due to OS restrictions on the + /// maximum length of command lines. #[arg( long, value_name = "size", @@ -404,32 +439,30 @@ pub struct Opts { requires("exec_batch"), value_parser = value_parser!(usize), default_value_t, - long_help = "Maximum number of arguments to pass to the command given with -X. \ - If the number of results is greater than the given size, \ - the command given with -X is run again with remaining arguments. \ - A batch size of zero means there is no limit (default), but note \ - that batching might still happen due to OS restrictions on the \ - maximum length of command lines.", + help = "Max number of arguments to run as a batch size with -X", + long_help, )] pub batch_size: usize, - /// Add a custom ignore-file in '.gitignore' format + /// Add a custom ignore-file in '.gitignore' format. These files have a low precedence. #[arg( long, value_name = "path", hide_short_help = true, - long_help = "Add a custom ignore-file in '.gitignore' format. These files have a low precedence." + help = "Add a custom ignore-file in '.gitignore' format", + long_help )] pub ignore_file: Vec, - /// When to use colors + /// Declare when to use color for the pattern match output #[arg( long, short = 'c', value_enum, default_value_t = ColorWhen::Auto, value_name = "when", - long_help = "Declare when to use color for the pattern match output", + help = "When to use colors", + long_help, )] pub color: ColorWhen, @@ -445,100 +478,109 @@ pub struct Opts { #[arg(long, hide = true, value_parser = parse_millis)] pub max_buffer_time: Option, - /// Limit number of search results + ///Limit the number of search results to 'count' and quit immediately. #[arg( long, value_name = "count", hide_short_help = true, - long_help = "Limit the number of search results to 'count' and quit immediately." + help = "Limit the number of search results", + long_help )] max_results: Option, - /// Limit search to a single result + /// Limit the search to a single result and quit immediately. + /// This is an alias for '--max-results=1'. #[arg( short = '1', hide_short_help = true, overrides_with("max_results"), - long_help = "Limit the search to a single result and quit immediately. \ - This is an alias for '--max-results=1'." + help = "Limit search to a single result", + long_help )] max_one_result: bool, - /// Print nothing, exit code 0 if match found, 1 otherwise + /// When the flag is present, the program does not print anything and will + /// return with an exit code of 0 if there is at least one match. Otherwise, the + /// exit code will be 1. + /// '--has-results' can be used as an alias. #[arg( long, short = 'q', alias = "has-results", hide_short_help = true, conflicts_with("max_results"), - long_help = "When the flag is present, the program does not print anything and will \ - return with an exit code of 0 if there is at least one match. Otherwise, the \ - exit code will be 1. \ - '--has-results' can be used as an alias." + help = "Print nothing, exit code 0 if match found, 1 otherwise", + long_help )] pub quiet: bool, - /// Show filesystem errors + /// Enable the display of filesystem errors for situations such as + /// insufficient permissions or dead symlinks. #[arg( long, hide_short_help = true, - long_help = "Enable the display of filesystem errors for situations such as \ - insufficient permissions or dead symlinks." + help = "Show filesystem errors", + long_help )] pub show_errors: bool, - /// Change current working directory + /// Change the current working directory of fd to the provided path. This + /// means that search results will be shown with respect to the given base + /// path. Note that relative paths which are passed to fd via the positional + /// argument or the '--search-path' option will also be resolved + /// relative to this directory. #[arg( long, value_name = "path", hide_short_help = true, - long_help = "Change the current working directory of fd to the provided path. This \ - means that search results will be shown with respect to the given base \ - path. Note that relative paths which are passed to fd via the positional \ - argument or the '--search-path' option will also be resolved \ - relative to this directory." + help = "Change current working directory", + long_help )] pub base_directory: Option, - /// the search pattern (a regular expression, unless '--glob' is used; optional) + /// the search pattern which is either a regular expression (default) or a glob + /// pattern (if --glob is used). If no pattern has been specified, every entry + /// is considered a match. If your pattern starts with a dash (-), make sure to + /// pass '--' first, or it will be considered as a flag (fd -- '-foo'). #[arg( default_value = "", hide_default_value = true, value_name = "pattern", - long_help = "the search pattern which is either a regular expression (default) or a glob \ - pattern (if --glob is used). If no pattern has been specified, every entry \ - is considered a match. If your pattern starts with a dash (-), make sure to \ - pass '--' first, or it will be considered as a flag (fd -- '-foo')." + help = "the search pattern (a regular expression, unless '--glob' is used; optional)", + long_help )] pub pattern: String, - /// Set path separator when printing file paths + /// Set the path separator to use when printing file paths. The default is + /// the OS-specific separator ('/' on Unix, '\' on Windows). #[arg( long, value_name = "separator", hide_short_help = true, - long_help = "Set the path separator to use when printing file paths. The default is \ - the OS-specific separator ('/' on Unix, '\\' on Windows)." + help = "Set path separator when printing file paths", + long_help )] pub path_separator: Option, - /// the root directories for the filesystem search (optional) + /// The directory where the filesystem search is rooted (optional). If + /// omitted, search the current working directory. #[arg(action = ArgAction::Append, value_name = "path", - long_help = "The directory where the filesystem search is rooted (optional). If \ - omitted, search the current working directory.", + help = "the root directories for the filesystem search (optional)", + long_help, )] path: Vec, - /// Provides paths to search as an alternative to the positional argument + /// Provide paths to search as an alternative to the positional + /// argument. Changes the usage to `fd [OPTIONS] --search-path + /// --search-path []` #[arg( long, conflicts_with("path"), value_name = "search-path", hide_short_help = true, - long_help = "Provide paths to search as an alternative to the positional \ - argument. Changes the usage to `fd [OPTIONS] --search-path \ - --search-path []`" + help = "Provides paths to search as an alternative to the positional argument", + long_help )] search_path: Vec, @@ -546,20 +588,15 @@ pub struct Opts { /// -X/--exec-batch, or -0/--print0 are given, to reduce the risk of a /// path starting with '-' being treated as a command line option. Use /// this flag to disable this behaviour. - #[arg(long, conflicts_with_all(&["path", "search_path"]), hide_short_help = true, - long_help = "By default, relative paths are prefixed with './' when -x/--exec, \ - -X/--exec-batch, or -0/--print0 are given, to reduce the risk of a \ - path starting with '-' being treated as a command line option. Use \ - this flag to disable this behaviour.", - )] + #[arg(long, conflicts_with_all(&["path", "search_path"]), hide_short_help = true, long_help)] pub strip_cwd_prefix: bool, + /// By default, fd will traverse the file system tree as far as other options + /// dictate. With this flag, fd ensures that it does not descend into a + /// different file system than the one it started in. Comparable to the -mount + /// or -xdev filters of find(1). #[cfg(any(unix, windows))] - #[arg(long, aliases(&["mount", "xdev"]), hide_short_help = true, - long_help = "By default, fd will traverse the file system tree as far as other options \ - dictate. With this flag, fd ensures that it does not descend into a \ - different file system than the one it started in. Comparable to the -mount \ - or -xdev filters of find(1).")] + #[arg(long, aliases(&["mount", "xdev"]), hide_short_help = true, long_help)] pub one_file_system: bool, #[cfg(feature = "completions")]