Add --print0 option

This commit is contained in:
Michael Mior 2017-07-19 17:10:06 -04:00
parent 918e4a014a
commit 1b0c8f349a
2 changed files with 23 additions and 3 deletions

View File

@ -53,6 +53,9 @@ struct FdOptions {
/// Whether to follow symlinks or not.
follow_links: bool,
/// Whether elements of output should be separated by a null character
zero: bool,
/// The maximum search depth, or `None` if no maximum search depth should be set.
///
/// A depth of `1` includes all files under the current directory, a depth of `2` also includes
@ -143,13 +146,22 @@ fn print_entry(base: &Path, entry: &Path, config: &FdOptions) {
print!("{}", style.paint(sep));
}
}
println!();
if config.zero {
print!("{}", '\0');
} else {
println!();
}
} else {
// Uncolorized output
let prefix = if config.path_display == PathDisplay::Absolute { ROOT_DIR } else { "" };
let separator = if config.zero {
"\0"
} else {
"\n"
};
let r = writeln!(&mut std::io::stdout(), "{}{}", prefix, path_str);
let r = write!(&mut std::io::stdout(), "{}{}{}", prefix, path_str, separator);
if r.is_err() {
// Probably a broken pipe. Exit gracefully.
@ -230,6 +242,10 @@ fn main() {
.long("follow")
.short("f")
.help("Follow symlinks"))
.arg(Arg::with_name("zero")
.long("print0")
.short("0")
.help("Separate each path by the null character"))
.arg(Arg::with_name("absolute-path")
.long("absolute-path")
.short("a")
@ -306,6 +322,7 @@ fn main() {
ignore_hidden: !matches.is_present("hidden"),
read_ignore: !matches.is_present("no-ignore"),
follow_links: matches.is_present("follow"),
zero: matches.is_present("zero"),
max_depth: matches.value_of("depth")
.and_then(|ds| usize::from_str_radix(ds, 10).ok()),
path_display: if matches.is_present("absolute-path") || root_dir_is_absolute {

View File

@ -32,7 +32,7 @@ expect() {
echo "$expected_output" > "$tmp_expected"
"$fd" "$@" | sort -f > "$tmp_output"
"$fd" "$@" | xargs -0 echo -n | sort -f > "$tmp_output"
echo -ne " ${bold}${reset} Testing 'fd $*' ... "
@ -181,6 +181,9 @@ one/two/C.Foo2
symlink/c.foo
symlink/C.Foo2" --follow c.foo
suite "Null separator (--print0)"
expect "one/two/C.Foo2 one/two/c.foo one/two/three/d.foo one/two/three/directory_foo one/b.foo a.foo" --print0 foo
suite "Maximum depth (--max-depth)"
expect "a.foo