Get a List of File Paths in a Directory Recursively in Rust

September 2025

This is how I get a recursive list of files from a directory:

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

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

fn main() {
  let dir = PathBuf::from("recursive_test");
  let files = get_files_recursively(&dir);
  files.iter().for_each(|f| {
    println!("File: {}", f.display());
  });
}

fn get_files_recursively(dir: &PathBuf) -> Vec<PathBuf> {
  WalkDir::new(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()
}
Output:
File: recursive_test/a/2.txt
File: recursive_test/a/c/4.txt
File: recursive_test/a/c/delta.html
File: recursive_test/alfa.html
File: recursive_test/1.txt
File: recursive_test/bravo.html
File: recursive_test/b/3.txt
File: recursive_test/b/charlie.html

Notes

  • works with relative or absolute paths for the starting dir
  • only does files, not directories
  • skips hidden (.) files
end of line