1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use std::fs;
use std::io;
use std::path::Path;
use walkdir::WalkDir;
pub fn copy_files<S: AsRef<Path>, T: AsRef<Path>>(
source: S,
target: T,
extension: &str,
) -> io::Result<()> {
let source = source.as_ref();
let target = target.as_ref();
for entry in WalkDir::new(source) {
let entry = entry?;
if entry.path().is_file()
&& entry
.path()
.to_str()
.map(|s| s.ends_with(extension))
.unwrap_or(false)
{
let source_path = entry.path();
let target_path = target.join(source_path.strip_prefix(source).unwrap_or(source_path));
let _ = fs::copy(source_path, target_path)?;
}
}
Ok(())
}