diff --git a/README.md b/README.md index f2fda276e..a41fe6503 100644 --- a/README.md +++ b/README.md @@ -285,19 +285,20 @@ USAGE: fd [FLAGS/OPTIONS] [] [...] FLAGS: - -H, --hidden Search hidden files and directories - -I, --no-ignore Do not respect .(git|fd)ignore files - --no-ignore-vcs Do not respect .gitignore files - -s, --case-sensitive Case-sensitive search (default: smart case) - -i, --ignore-case Case-insensitive search (default: smart case) - -g, --glob Glob-based search (default: regular expression) - -F, --fixed-strings Treat the pattern as a literal string - -a, --absolute-path Show absolute instead of relative paths - -L, --follow Follow symbolic links - -p, --full-path Search full path (default: file-/dirname only) - -0, --print0 Separate results by the null character - -h, --help Prints help information - -V, --version Prints version information + -H, --hidden Search hidden files and directories + -I, --no-ignore Do not respect .(git|fd)ignore files + --no-ignore-vcs Do not respect .gitignore files + -s, --case-sensitive Case-sensitive search (default: smart case) + -i, --ignore-case Case-insensitive search (default: smart case) + -g, --glob Glob-based search (default: regular expression) + -F, --fixed-strings Treat the pattern as a literal string + -a, --absolute-path Show absolute instead of relative paths + -L, --follow Follow symbolic links + --same-file-system Don't cross file system boundaries (only Unix/Windows) + -p, --full-path Search full path (default: file-/dirname only) + -0, --print0 Separate results by the null character + -h, --help Prints help information + -V, --version Prints version information OPTIONS: -d, --max-depth Set maximum search depth (default: none) diff --git a/src/app.rs b/src/app.rs index b86169d85..a2bfecb85 100644 --- a/src/app.rs +++ b/src/app.rs @@ -115,6 +115,7 @@ pub fn build_app() -> App<'static, 'static> { .alias("dereference") .overrides_with("follow"), ) + .arg(arg("same-file-system").long("same-file-system")) .arg( arg("full-path") .long("full-path") @@ -329,6 +330,11 @@ fn usage() -> HashMap<&'static str, Help> { , "Follow symbolic links" , "By default, fd does not descend into symlinked directories. Using this flag, symbolic \ links are also traversed."); + doc!(h, "same-file-system" + , "Don't cross file system boundaries (only Unix/Windows)" + , "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. Does nothing if not on Unix or Windows."); doc!(h, "full-path" , "Search full path (default: file-/dirname only)" , "By default, the search pattern is only matched against the filename (or directory \ diff --git a/src/internal/opts.rs b/src/internal/opts.rs index 1673129a0..6ac1a20c7 100644 --- a/src/internal/opts.rs +++ b/src/internal/opts.rs @@ -28,6 +28,9 @@ pub struct FdOptions { /// Whether to follow symlinks or not. pub follow_links: bool, + /// Whether to limit the search to starting file system or not. + pub same_file_system: bool, + /// Whether elements of output should be separated by a null character pub null_separator: bool, diff --git a/src/main.rs b/src/main.rs index e17dc7d12..544ba78e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -208,6 +208,7 @@ fn main() { || matches.is_present("rg-alias-hidden-ignore") || matches.is_present("no-ignore-vcs")), follow_links: matches.is_present("follow"), + same_file_system: matches.is_present("same-file-system"), null_separator: matches.is_present("null_separator"), max_depth: matches .value_of("depth") diff --git a/src/walk.rs b/src/walk.rs index 4554a95ed..ddd00ee56 100644 --- a/src/walk.rs +++ b/src/walk.rs @@ -78,6 +78,8 @@ pub fn scan(path_vec: &[PathBuf], pattern: Arc, config: Arc) - .git_exclude(config.read_vcsignore) .overrides(overrides) .follow_links(config.follow_links) + // Same file system is only supported on Unix and Windows platforms + .same_file_system(config.same_file_system && (cfg!(unix) || cfg!(windows))) .max_depth(config.max_depth); if config.read_fdignore {