diff --git a/src/main.rs b/src/main.rs index ffeef54..5ea2481 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,6 +59,8 @@ fn main() { .short("X") .long("ignore-directory") .takes_value(true) + .number_of_values(1) + .multiple(true) .help("Exclude any file or directory with contains this substring."), ) .arg( @@ -135,12 +137,12 @@ fn main() { let use_apparent_size = options.is_present("display_apparent_size"); let limit_filesystem = options.is_present("limit_filesystem"); - let ignore_directory = options.value_of("ignore_directory"); + let ignore_directories = options.values_of("ignore_directory").map(|r| r.collect()); let simplified_dirs = simplify_dir_names(target_dirs); let (permissions, nodes) = get_dir_tree( &simplified_dirs, - ignore_directory, + ignore_directories, use_apparent_size, limit_filesystem, threads, diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 5344d99..c8a5b34 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -70,7 +70,7 @@ pub fn simplify_dir_names(filenames: Vec<&str>) -> HashSet { pub fn get_dir_tree( top_level_names: &HashSet, - ignore_directory: Option<&str>, + ignore_directories: Option>, apparent_size: bool, limit_filesystem: bool, threads: Option, @@ -88,7 +88,7 @@ pub fn get_dir_tree( &b, apparent_size, &restricted_filesystems, - &ignore_directory, + &ignore_directories, &mut data, &mut permissions, threads, @@ -118,7 +118,7 @@ fn examine_dir( top_dir: &str, apparent_size: bool, filesystems: &Option>, - ignore_directory: &Option<&str>, + ignore_directories: &Option>, data: &mut HashMap, file_count_no_permission: &mut u64, threads: Option, @@ -130,12 +130,14 @@ fn examine_dir( if let Some(threads_to_start) = threads { iter = iter.num_threads(threads_to_start); } - for entry in iter { + 'entry: for entry in iter { if let Ok(e) = entry { let maybe_size_and_inode = get_metadata(&e, apparent_size); - if let Some(d) = ignore_directory { - if e.path().to_string_lossy().contains(*d) { - continue; + if let Some(d) = ignore_directories { + for s in d { + if e.path().to_string_lossy().contains(*s) { + continue 'entry; + } } }