use find_duplicate_files::*;
use std::time::Instant;
fn main() -> MyResult<()> {
set_env_variables();
let time = Instant::now();
let arguments = Arguments::build()?;
let all_files: Vec<FileInfo> = get_all_files(&arguments)?;
if arguments.verbose {
eprintln!(
"0. {:<43}: {:>10}, time_elapsed: {:?}",
"Total number of files",
all_files.len(),
time.elapsed()
);
}
let duplicate_size: Vec<GroupInfo> = all_files.get_grouped_files(&arguments, 1);
if arguments.verbose {
eprintln!(
"1. {:<43}: {:>10}, time_elapsed: {:?}",
"Number of files of identical size",
duplicate_size.len(),
time.elapsed()
);
}
let duplicate_bytes: Vec<GroupInfo> = duplicate_size.get_identical_files(&arguments, 2);
if arguments.verbose {
eprintln!(
"2. {:<43}: {:>10}, time_elapsed: {:?}",
"Number of files with identical first bytes",
duplicate_bytes.len(),
time.elapsed()
);
}
let mut duplicate_hash: Vec<GroupInfo> = duplicate_bytes.get_identical_files(&arguments, 3);
if arguments.verbose {
eprintln!(
"3. {:<43}: {:>10}, time_elapsed: {:?}",
"Number of files with identical hashes",
duplicate_hash.len(),
time.elapsed()
);
}
duplicate_hash.sort_identical_files(&arguments);
TotalInfo::get_summary(&duplicate_hash, &arguments, all_files.len())
.print_sumary(&arguments)?;
std::thread::scope(|s| {
s.spawn(|| -> MyResult<()> {
if let Some(dir_path) = arguments.csv_dir {
duplicate_hash.export_to_csv(dir_path)?;
}
Ok(())
});
s.spawn(|| -> MyResult<()> {
if let Some(dir_path) = arguments.xlsx_dir {
duplicate_hash.export_to_xlsx(dir_path)?;
}
Ok(())
});
});
if arguments.time {
println!("Total Execution Time: {:?}", time.elapsed());
}
Ok(())
}