feat: new param: ignore-all-in-file

Add new cmd line param to ignore all files or directories listed in this
file
This commit is contained in:
andy.boot
2023-12-13 22:39:51 +00:00
parent e8c7990a17
commit cd53fc7494
11 changed files with 62 additions and 4 deletions
+7
View File
@@ -37,6 +37,13 @@ pub fn build_cli() -> Command {
.long("ignore-directory")
.action(clap::ArgAction::Append)
.help("Exclude any file or directory with this name"),
)
.arg(
Arg::new("ignore_all_in_file")
.short('I')
.long("ignore-all-in-file")
.value_parser(value_parser!(String))
.help("Exclude any file or directory with a regex matching that listed in this file, the file entries will be added to the ignore regexs provided by --invert_filter"),
)
.arg(
Arg::new("dereference_links")
+20
View File
@@ -17,7 +17,9 @@ use display::InitialDisplayData;
use filter::AggregateData;
use progress::PIndicator;
use progress::ORDERING;
use regex::Error;
use std::collections::HashSet;
use std::fs::read_to_string;
use std::panic;
use std::process;
use sysinfo::{System, SystemExt};
@@ -142,6 +144,24 @@ fn main() {
None => vec![],
};
let ignore_from_file_result = match options.get_one::<String>("ignore_all_in_file") {
Some(val) => read_to_string(val)
.unwrap()
.lines()
.map(Regex::new)
.collect::<Vec<Result<Regex, Error>>>(),
None => vec![],
};
let ignore_from_file = ignore_from_file_result
.into_iter()
.filter_map(|x| x.ok())
.collect::<Vec<Regex>>();
let invert_filter_regexs = invert_filter_regexs
.into_iter()
.chain(ignore_from_file)
.collect::<Vec<Regex>>();
let by_filecount = options.get_flag("by_filecount");
let limit_filesystem = options.get_flag("limit_filesystem");
let follow_links = options.get_flag("dereference_links");