fsz 0.2.0

Simple file size by pattern
Documentation
use regex::Regex;
use std::error::Error;
use std::fmt::Write;
use walkdir::WalkDir;

pub fn total_size(root: String, pattern: String) -> Result<u64, Box<dyn Error>> {
    let mut total_size = 0;
    let re = Regex::new(&pattern)?;

    for entry in WalkDir::new(root).into_iter().filter_map(Result::ok) {
        if !entry.file_type().is_file() {
            continue;
        }

        if let Some(filename) = entry.file_name().to_str() {
            if re.is_match(filename) {
                if let Some(path) = entry.path().to_str() {
                    let size = entry.metadata()?.len();

                    total_size += size;

                    println!("path: {path}\nsize: {size} bytes");
                }
            }
        }
    }

    let mut total_size_str = String::new();

    let size_kb = total_size as f64 / 1024.;
    let size_mb = size_kb / 1024.;

    write!(&mut total_size_str, "Total size: {total_size} bytes")?;

    if size_kb > 1. {
        write!(&mut total_size_str, " / {size_kb:.2} KB")?;
    }

    if size_mb > 1. {
        write!(&mut total_size_str, " / {size_mb:.2} MB")?;
    }

    println!("{total_size_str}");

    return Ok(total_size);
}