diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2019-06-30 12:44:02 -0400 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2019-06-30 12:44:02 -0400 |
commit | b9a3d876d046c3920ee63c6454fc43a5b9158f35 (patch) | |
tree | 81288f98b94b953806080239f6bbc6cd6d3b184a /src | |
parent | 242bae74d7b97e4542afbd9b1c708b45919e9695 (diff) |
use mv for bulk renaming files
Diffstat (limited to 'src')
-rw-r--r-- | src/commands/bulk_rename.rs | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/commands/bulk_rename.rs b/src/commands/bulk_rename.rs index 2db758f..1c7ab46 100644 --- a/src/commands/bulk_rename.rs +++ b/src/commands/bulk_rename.rs @@ -30,20 +30,20 @@ impl BulkRename { )), }; - let curr_tab = &context.tabs[context.curr_tab_index]; - - let paths = curr_tab.curr_list.get_selected_paths(); + /* generate a random file name to write to */ let mut rand_str = String::with_capacity(PREFIX.len() + 10); rand_str.push_str(PREFIX); - rand::thread_rng() .sample_iter(&rand::distributions::Alphanumeric) .take(10) .for_each(|ch| rand_str.push(ch)); + /* create this file in a temporary folder */ let mut file_path = path::PathBuf::from("/tmp"); file_path.push(rand_str); + let curr_tab = &context.tabs[context.curr_tab_index]; + let paths = curr_tab.curr_list.get_selected_paths(); { let mut file = std::fs::File::create(&file_path)?; for path in &paths { @@ -57,6 +57,7 @@ impl BulkRename { let mut command = process::Command::new(editor); command.arg(&file_path); + let time = std::time::SystemTime::now(); /* exit curses and launch program */ { ncurses::savetty(); @@ -64,6 +65,10 @@ impl BulkRename { let mut handle = command.spawn()?; handle.wait()?; } + let metadata = std::fs::metadata(&file_path)?; + if time >= metadata.modified()? { + return Ok(()); + } let mut paths_renamed: Vec<path::PathBuf> = Vec::with_capacity(paths.len()); { @@ -80,6 +85,12 @@ impl BulkRename { paths_renamed.push(path); } } + if paths_renamed.len() < paths.len() { + return Err(JoshutoError::new( + JoshutoErrorKind::IOInvalidInput, + String::from("Not enough input given"), + )); + } for (p, q) in paths.iter().zip(paths_renamed.iter()) { println!("{:?} -> {:?}", p, q); @@ -94,9 +105,19 @@ impl BulkRename { let user_input_trimmed = user_input.trim(); if user_input_trimmed == "y" || user_input_trimmed == "yes" { for (p, q) in paths.iter().zip(paths_renamed.iter()) { - std::fs::rename(p, q)?; + let mut command = process::Command::new("mv"); + command.arg("-iv"); + command.arg("--"); + command.arg(p); + command.arg(q); + let mut handle = command.spawn()?; + handle.wait()?; } } + print!("Press ENTER to continue"); + std::io::stdout().flush()?; + std::io::stdin().read_line(&mut user_input)?; + std::fs::remove_file(file_path)?; /* restore ncurses */ |