Copy a File with mkdir without Causing an Infinite Loop in notify/watchexec in Rust
September 2025
use std::path::PathBuf;
pub fn copy_file_with_mkdir(input_path: &PathBuf, output_path: &PathBuf) -> Result<(), std::io::Error> {
if let Some(parent_dir) = output_path.parent() {
std::fs::create_dir_all(parent_dir)?;
}
let data = std::fs::read(input_path)?;
std::fs::write(output_path, &data)?;
Ok(())
}
fn main() {
vec![
(
"copy_mkdir_test_rust/input_dir/alfa.txt",
"copy_mkdir_test_rust/output_dir/alfa.txt",
),
(
"copy_mkdir_test_rust/input_dir/sample.png",
"copy_mkdir_test_rust/output_dir/sample.png",
),
(
"copy_mkdir_test_rust/input_dir/sub-dir/bravo.txt",
"copy_mkdir_test_rust/output_dir/sub-dir/bravo.txt",
),
(
"copy_mkdir_test_rust/input_dir/sub-dir/another-dir/charlie.txt",
"copy_mkdir_test_rust/output_dir/sub-dir/another-dir/charlie.txt",
)
]
.iter()
.for_each(|paths| {
let input_path = PathBuf::from(paths.0);
let output_path = PathBuf::from(paths.1);
copy_file_with_mkdir(&input_path, &output_path).unwrap();
()
});
println!("done.");
}