Create a Recursive List of Input and Output Paths to Copy Files in Rust
October 2025
This is a snippet to refine of how I'm making a list of copy to/from paths.
I have to do this all the time so I'm extracting it out into its own function.
pub fn make_copy_paths_list(
in_dir: &PathBuf,
out_dir: &PathBuf,
extensions: &Vec<&str>,
) -> Result<Vec<(PathBuf, PathBuf)>> {
Ok(
WalkDir::new(in_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)
})
.filter(|e| {
if let Some(ext) = e.path().extension() {
extensions.contains(&ext.to_str().unwrap())
} else {
false
}
})
.map(|e| {
let dest_path =
out_dir.join(e.path().strip_prefix(in_dir).unwrap());
(e.path().to_path_buf(), dest_path)
})
.collect(),
)
}