From c3a1fdfb7b5c05d228bd220bc3c783dc59e3a6c9 Mon Sep 17 00:00:00 2001 From: id3v1669 Date: Sat, 30 Aug 2025 08:47:04 +0800 Subject: [PATCH] mv: treat symlinks as files --- src/uu/mv/src/mv.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/uu/mv/src/mv.rs b/src/uu/mv/src/mv.rs index b89290149..b737b88a0 100644 --- a/src/uu/mv/src/mv.rs +++ b/src/uu/mv/src/mv.rs @@ -375,8 +375,8 @@ fn handle_two_paths(source: &Path, target: &Path, opts: &Options) -> UResult<()> }); } - let target_is_dir = target.is_dir(); - let source_is_dir = source.is_dir(); + let target_is_dir = target.is_dir() && !target.is_symlink(); + let source_is_dir = source.is_dir() && !source.is_symlink(); if path_ends_with_terminator(target) && (!target_is_dir && !source_is_dir) @@ -415,7 +415,7 @@ fn handle_two_paths(source: &Path, target: &Path, opts: &Options) -> UResult<()> } else { move_files_into_dir(&[source.to_path_buf()], target, opts) } - } else if target.exists() && source.is_dir() { + } else if target.exists() && source_is_dir { match opts.overwrite { OverwriteMode::NoClobber => return Ok(()), OverwriteMode::Interactive => { @@ -747,7 +747,7 @@ fn rename( } // "to" may no longer exist if it was backed up - if to.exists() && to.is_dir() { + if to.exists() && to.is_dir() && !to.is_symlink() { // normalize behavior between *nix and windows if from.is_dir() { if is_empty_dir(to) {