```
use std::fs;
use std::process;
use std::path::Path;
use std::io;
use std::sync::mpsc;
use std::thread;
use clap::{Arg, App};
fn main() {
let matches = App::new("Hunter")
.version("1.0")
.author("eltneg <eltneg@prjct.dev>")
.about("Hunt for a folder")
.arg(Arg::new("path")
.about("Full path to hunt")
.required(true)
.index(1))
.arg(Arg::new("del")
.short('d')
.long("delete")
.about("Delete node modules")
.takes_value(false))
.arg(Arg::new("query")
.short('q')
.long("query")
.about("Search query")
.required(true)
.takes_value(true)).get_matches();
let mut path = String::from("");
let mut query = String::new();
let delt = matches.is_present("del");
if let Some(p) = matches.value_of("path") {
path = String::from(p);
println!("Value for path: {}", path);
}
if let Some(q) = matches.value_of("query") {
query = String::from(q);
println!("Value for query: {}", query);
}
let mut all_files: Vec<String> = [].to_vec();
let (tx, rx) = mpsc::channel();
// let tx1 = mpsc::Sender::clone(&tx);
walk_dir(Path::new(&path), &query, tx);
println!("All files: {:#?}", all_files);
for recv in rx {
all_files.push(recv);
}
if delt {
println!("A total of {} files will be deleted. Proceed? y/n", all_files.len());
let mut conti = String::new();
io::stdin().read_line(&mut conti).expect("Failed to readline");
let conti = conti.trim() == "y";
if conti {
println!("Deleting...");
for folder in all_files {
fs::remove_dir_all(Path::new(&folder)).unwrap_or_else(|err| {
println!("Error removing dir");
println!("{}", err);
process::exit(0)
})
}
println!("Delete completed!")
}
}
}
fn walk_dir(dir: &Path, query: &'static String, tx: mpsc::Sender<std::string::String>) {
let files = fs::read_dir(dir).unwrap_or_else(|err| {
println!("Error reading dir");
println!("{}", err);
process::exit(0)
});
for file in files {
let file = file.unwrap();
if file.path().is_dir(){
let s = String::from(file.path().to_string_lossy());
if s.ends_with(query){
tx.send(s);
}else {
let tx = mpsc::Sender::clone(&tx);
thread::spawn(move || {
walk_dir(&file.path(), query, tx);
});
}
}
}
}
```