add: add --upgrade,-u for mv command

This commit is contained in:
Embers-of-the-Fire 2024-08-01 09:17:43 +08:00
parent f82c43f850
commit 9c791f84c1

View File

@ -30,6 +30,11 @@ impl Command for UMv {
example: "mv test.txt my/subdirectory", example: "mv test.txt my/subdirectory",
result: None, result: None,
}, },
Example {
description: "Move only if source file is newer than target file",
example: "mv -u new/test.txt old/",
result: None,
},
Example { Example {
description: "Move many files into a directory", description: "Move many files into a directory",
example: "mv *.txt my/subdirectory", example: "mv *.txt my/subdirectory",
@ -49,6 +54,11 @@ impl Command for UMv {
.switch("verbose", "explain what is being done.", Some('v')) .switch("verbose", "explain what is being done.", Some('v'))
.switch("progress", "display a progress bar", Some('p')) .switch("progress", "display a progress bar", Some('p'))
.switch("interactive", "prompt before overwriting", Some('i')) .switch("interactive", "prompt before overwriting", Some('i'))
.switch(
"update",
"move and overwite only when the SOURCE file is newer than the destination file or when the destination file is missing",
Some('u')
)
.switch("no-clobber", "do not overwrite an existing file", Some('n')) .switch("no-clobber", "do not overwrite an existing file", Some('n'))
.rest( .rest(
"paths", "paths",
@ -77,6 +87,11 @@ impl Command for UMv {
} else { } else {
uu_mv::OverwriteMode::Force uu_mv::OverwriteMode::Force
}; };
let update = if call.has_flag(engine_state, stack, "update")? {
UpdateMode::ReplaceIfOlder
} else {
UpdateMode::ReplaceAll
};
#[allow(deprecated)] #[allow(deprecated)]
let cwd = current_dir(engine_state, stack)?; let cwd = current_dir(engine_state, stack)?;
@ -164,7 +179,7 @@ impl Command for UMv {
verbose, verbose,
suffix: String::from("~"), suffix: String::from("~"),
backup: BackupMode::NoBackup, backup: BackupMode::NoBackup,
update: UpdateMode::ReplaceAll, update,
target_dir: None, target_dir: None,
no_target_dir: false, no_target_dir: false,
strip_slashes: false, strip_slashes: false,