Browse Source

neues Projekt angefangen

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
main
Stephan Richter 5 months ago
commit
d6bfcd51aa
  1. 2
      .gitignore
  2. 7
      Cargo.lock
  3. 8
      Cargo.toml
  4. 68
      src/main.rs

2
.gitignore vendored

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
/target
*~

7
Cargo.lock generated

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "date_renamer"
version = "0.1.0"

8
Cargo.toml

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
[package]
name = "date_renamer"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

68
src/main.rs

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
//! # date_renamer
//! Kleines Programm, dass hilft Datumsangaben aus Dateinamen an den Anfang des Dateinamens zu bringen.
//! Beispiel:
//!
//! | Dateiname vor Umbenennung | Dateiname nach Umbenennung |
//! |---------------------------|----------------------------|
//! | irgend_eine_datei_dat20231231_test.pdf | 20231231_irgend_eine_datei_test.pdf |
//!
//! ## Verwendung
//! Das binary wird mit dem Pfad zu einem Ordner aufgerufen, z.B. DateRenamer _/home/srichter/Test-Ordner_.
//! Dieser Ordner wird dann (nicht-rekursiv) nach Dateien durchsucht und diese ggf. umbenannt.
use std::env;
use std::path::Path;
use std::path::PathBuf;
use std::fs;
/// Informationen zur Programm-Funktion
fn usage(command: &String) {
println!("Usage: {} <dir>",command);
}
/// Einsprung für die Verarbeitung des angegebenen Verzeichnisses
fn process_dir(directory: &String) {
let path = Path::new(directory);
assert!(env::set_current_dir(&path).is_ok());
let entries = fs::read_dir(".").unwrap();
println!("contents of {}:",path.display());
for entry in entries {
let path = entry.unwrap().path();
if path.is_file() {
process_file(&path);
}
}
}
/// Verarbeitung einer einzelnen Datei im Verzeichnis
fn process_file(file: &PathBuf){
let name = file.file_name().unwrap().to_str().unwrap();
let mut vec = Vec::new();
for part in name.split("_"){
match part.get(..3) {
Some("dat") => vec.insert(0,part.get(3..).unwrap()),
_ => vec.push(part),
}
}
let new_name = vec.join("_");
println!("- {} → {}",name,new_name);
let _ = fs::rename(name,new_name);
}
/// Einsprungpunkt.
/// * Prüft, on ein Parameter (Verzeichnis) angegeben wurde
/// * ruft dann entsprechend _usage_ oder _process_dir_ auf.
fn main() {
let args: Vec<String> = env::args().collect();
let command = &args[0];
if args.len() != 2 {
return usage(command);
}
let dir = &args[1];
println!("Started {} on {}",command,dir);
process_dir(dir);
}
Loading…
Cancel
Save