home ~ projects ~ socials

Get A Recursive List Of File In A Directory With Specific Extensions In Rust

```cargo
[dependencies]
walkdir = "2"
```

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

fn main() {
  let dir = PathBuf::from("recursive_test");
  let extensions = vec!["html", "txt"];
  let files = get_files_with_extensions(&dir, &extensions);
  files.iter().for_each(|f| {
    println!("File: {}", f.display());
  });
}

fn get_files_with_extensions(dir: &PathBuf, extensions: &Vec<&str>) -> Vec<PathBuf>{
  WalkDir::new(dir)
    .into_iter()
    .filter_map(|e| {
      let path = e.as_ref().unwrap().path(); 
      match path.extension() {
        Some(ext) => {
          if extensions.contains(&ext.to_str().unwrap()){
            Some(path.to_path_buf())
          } else {
            None
          }
        },
        None => None 
      }
    })
    .collect()
}
Output:
File: recursive_test/example/.hidden_file_1.txt
File: recursive_test/example/a/2.txt
File: recursive_test/example/a/c/4.txt
File: recursive_test/example/a/c/delta.html
File: recursive_test/example/.hidden_file_2.txt
File: recursive_test/example/alfa.html
File: recursive_test/example/1.txt
File: recursive_test/example/bravo.html
File: recursive_test/example/b/3.txt
File: recursive_test/example/b/charlie.html
-- end of line --