home ~ projects ~ socials

Read Files In A Directory Recursively In Rust

---
[dependencies]
anyhow = "1.0.98"
walkdir = "2"
---

use anyhow::Result;
use walkdir::WalkDir;
use std::path::PathBuf;

fn main() -> Result<()> {
    let root_dir = PathBuf::from("recursive_test");
    let files = get_files_in_dir(&root_dir)?;
    dbg!(files);
    Ok(())
}

pub fn get_files_in_dir(root_dir: &PathBuf) -> Result<Vec<PathBuf>> {
    let file_list: Vec<PathBuf> = WalkDir::new(root_dir)
        .into_iter()
        .filter_map(|e| e.ok())
        .filter(|e| e.path().is_file())
        .filter(|e| 
            !e.file_name()
            .to_str()
            .map(|s| s.starts_with("."))
            .unwrap_or(false)
        )
        .map(|e| e.path().to_path_buf())
        .collect();
    Ok(file_list)
}
Output:
[/Users/alan/.cargo/target/4b/0baba35be9214e/_active_nvim_run:15:5] files = [
    "recursive_test/example/a/2.txt",
    "recursive_test/example/a/c/4.txt",
    "recursive_test/example/a/c/delta.html",
    "recursive_test/example/alfa.html",
    "recursive_test/example/1.txt",
    "recursive_test/example/bravo.html",
    "recursive_test/example/b/3.txt",
    "recursive_test/example/b/charlie.html",
]

Notes

  • This version skips hidden files and directories
  • It will silently skip files and directories the process doesn't have permission to access.
-- end of line --