diff options
-rw-r--r-- | src/main.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 9bbe39f..24bd8f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -139,7 +139,7 @@ fn work() -> Result<(), Error> { if flags.dryrun { println!("{} -> {}", s.as_path().display(), dst.as_path().display()); } else { - fs::rename(s, &dst)?; + copy_and_remove_file_or_dir(&s, &dst)?; } *s_d = (dst, d.to_path_buf()) @@ -149,7 +149,7 @@ fn work() -> Result<(), Error> { if flags.dryrun { println!("{} -> {}", s.as_path().display(), d.as_path().display()); } else { - fs::rename(s, d)?; + copy_and_remove_file_or_dir(&s, &d)?; } } @@ -253,3 +253,14 @@ fn normalize_path(path: &Path) -> PathBuf { } ret } + +fn copy_and_remove_file_or_dir<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> io::Result<()> { + let data = fs::metadata(&from)?; + if data.is_dir() { + fs::create_dir(&to)?; + fs::remove_dir(&from) + } else { + fs::copy(&from, &to)?; + fs::remove_file(&from) + } +} |