diff --git a/src/uu/mv/src/mv.rs b/src/uu/mv/src/mv.rs index 5f1b71783..c57f2527e 100644 --- a/src/uu/mv/src/mv.rs +++ b/src/uu/mv/src/mv.rs @@ -446,6 +446,11 @@ fn move_files_into_dir(files: &[PathBuf], target_dir: &Path, options: &Options) }; for sourcepath in files { + if !sourcepath.exists() { + show!(MvError::NoSuchFile(sourcepath.quote().to_string())); + continue; + } + if let Some(ref pb) = count_progress { pb.set_message(sourcepath.to_string_lossy().to_string()); } diff --git a/tests/by-util/test_mv.rs b/tests/by-util/test_mv.rs index daab22009..d8bc49e8e 100644 --- a/tests/by-util/test_mv.rs +++ b/tests/by-util/test_mv.rs @@ -1717,3 +1717,18 @@ mod inter_partition_copying { .stderr_contains("Permission denied"); } } + +#[test] +fn test_mv_error_msg_with_multiple_sources_that_does_not_exist() { + let scene = TestScenario::new(util_name!()); + let at = &scene.fixtures; + at.mkdir("d"); + scene + .ucmd() + .arg("a") + .arg("b/") + .arg("d") + .fails() + .stderr_contains("mv: cannot stat 'a': No such file or directory") + .stderr_contains("mv: cannot stat 'b/': No such file or directory"); +}