extern crate jwalk; use jwalk::{Parallelism, WalkDirGeneric}; use std::env; fn main() { let path = env::args().skip(1).next().unwrap_or("./".to_owned()); let mut total: u64 = 0; for dir_entry_result in WalkDirGeneric::<((), Option)>::new(&path) .skip_hidden(false) .parallelism(Parallelism::RayonNewPool(4)) .process_read_dir(|_, _, _, dir_entry_results| { dir_entry_results.iter_mut().for_each(|dir_entry_result| { if let Ok(dir_entry) = dir_entry_result { if !dir_entry.file_type.is_dir() { dir_entry.client_state = Some(dir_entry.metadata().map(|m| m.len()).unwrap_or_default()); } } }) }) { match dir_entry_result { Ok(dir_entry) => { if let Some(len) = &dir_entry.client_state { eprintln!("counting {:?}", dir_entry.path()); total += len; } } Err(error) => { println!("Read dir_entry error: {}", error); } } } println!("path: {} total bytes: {}", path, total); }