From 5c4a6b6bf1e686f65631bd1e9939f6a54d0c9225 Mon Sep 17 00:00:00 2001 From: licsber Date: Sun, 8 Sep 2024 00:13:55 +0800 Subject: [PATCH] using parent dir as pwd. --- src/main.rs | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main.rs b/src/main.rs index e705f9d..a447be1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,30 +6,33 @@ use std::env; fn process_compressed_files(path: &Path) -> io::Result<()> { if path.is_dir() { - println!("Path: {}", path.display()); + println!("Processing directory: {}", path.display()); for entry in fs::read_dir(path)? { - let entry_path = fs::canonicalize(entry?.path())?; - process_compressed_files(&entry_path)?; - } - } else { - if path.extension().map_or(false, |ext| - ext == "rar" || ext == "zip", - ) { - println!("UNAR: {}", path.display()); - let output = Command::new("unar") - .current_dir(path) - .arg(path) - .output(); + let entry_path = entry?.path(); + if entry_path.is_dir() { + process_compressed_files(&entry_path)?; + } else if let Some(ext) = entry_path.extension().and_then(|e| e.to_str()) { + if ext == "rar" || ext == "zip" { + println!("UNAR: {}", entry_path.display()); + let parent_dir = entry_path.parent().unwrap(); + let filename = entry_path.file_name().to_str().unwrap(); + let output = Command::new("unar") + .current_dir(parent_dir) + .arg(filename) + .output(); - match output { - Ok(result) => { - if !result.status.success() { - eprintln!("Error processing compressed file {:?}: {}", path, String::from_utf8_lossy(&result.stderr)); + match output { + Ok(result) => { + if !result.status.success() { + eprintln!("Error processing compressed file {:?}: {}", entry_path, String::from_utf8_lossy(&result.stderr)); + } + } + Err(e) => { + eprintln!("Failed to execute unar for {:?}: {}", entry_path, e); + return Err(e); + } } } - Err(e) => { - eprintln!("Failed to execute unar for {:?}: {}", path, e); - } } } } @@ -45,6 +48,7 @@ fn main() -> io::Result<()> { } else { PathBuf::from(".") }; + process_compressed_files(&start_path)?; Ok(())