diff --git a/src/uu/cp/src/copydir.rs b/src/uu/cp/src/copydir.rs index a5c7e76c1..3439d0fd0 100644 --- a/src/uu/cp/src/copydir.rs +++ b/src/uu/cp/src/copydir.rs @@ -296,7 +296,7 @@ fn copy_direntry( if !source_is_dir { if let Err(err) = copy_file( progress_bar, - &entry.source_absolute, + &entry.source_relative, entry.local_to_target.as_path(), options, symlinked_files, diff --git a/tests/by-util/test_cp.rs b/tests/by-util/test_cp.rs index cd4f8ee73..6e6e3f290 100644 --- a/tests/by-util/test_cp.rs +++ b/tests/by-util/test_cp.rs @@ -7136,3 +7136,30 @@ fn test_cp_no_preserve_target_directory() { assert!(at.file_exists("e/f2")); assert!(at.file_exists("e/f3")); } + +#[test] +fn test_cp_recurse_verbose_output() { + let source_dir = "source_dir"; + let target_dir = "target_dir"; + let file = "file"; + #[cfg(not(windows))] + let output = format!( + "'{source_dir}' -> '{target_dir}/'\n'{source_dir}/{file}' -> '{target_dir}/{file}'\n" + ); + #[cfg(windows)] + let output = format!( + "'{source_dir}' -> '{target_dir}\\'\n'{source_dir}\\{file}' -> '{target_dir}\\{file}'\n" + ); + let (at, mut ucmd) = at_and_ucmd!(); + + at.mkdir(source_dir); + at.touch(format!("{source_dir}/{file}")); + + ucmd.arg(source_dir) + .arg(target_dir) + .arg("-r") + .arg("--verbose") + .succeeds() + .no_stderr() + .stdout_is(output); +}