dateien stapelweise umbenennen

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

dateien stapelweise umbenennen

Beitrag von startx » 10.07.2003 23:09:26

kennt jemand ein tool mit dem ich dateien und ordner stapelweise nach bestimmten kriterien
umbenennen kann, also zum besispiel "ale grossbuchstaben in dateinamen in einem verzeichnis
in kleinbuchstabne verwandelm". oder ganz toll wäre:" alle leerzeichen in den dateinamen entfernen oder durch "-" ersetzen.

oder gibt es einen trick dies per script zu lösen?

startx.

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 11.07.2003 04:41:41

Das geht natürlich auch mit der Shell, aber ich denke krename (Achtung: KDE) ist da komfortabler...

http://www.krename.net/

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
abi
Beiträge: 2218
Registriert: 20.12.2001 19:42:56
Wohnort: München
Kontaktdaten:

Beitrag von abi » 11.07.2003 14:14:32

man rename
rename 's/ /_/' files (oder *)

ernohl
Beiträge: 1181
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Re: dateien stapelweise umbenennen

Beitrag von ernohl » 11.07.2003 15:26:20

startx hat geschrieben:kennt jemand ein tool mit dem ich dateien und ordner stapelweise nach bestimmten kriterien
umbenennen kann, also zum besispiel "ale grossbuchstaben in dateinamen in einem verzeichnis
in kleinbuchstabne verwandelm". oder ganz toll wäre:" alle leerzeichen in den dateinamen entfernen oder durch "-" ersetzen.

oder gibt es einen trick dies per script zu lösen?

startx.
Beispiel Großbuchstaben in Kleinbuchstaben:

Code: Alles auswählen

for i in <deine_dateien>
do
mv $i `echo $i | tr 'A-Z' 'a-z'`
done
wobei <deine_dateien> entsprechend deiner konkreten Anforderung sein könnte:
`find . -print` oder `ls irgendwas`

Der tr-Teil für Leerzeichen nach Underline: tr ' ' '_'
oder entfernen: tr -d ' '

Das ganze noch etwas hübscher machen (falls sich der Dateiname nicht ändert, würde mv im obigen Beispiel meckern) und feddich.

ACHTUNG: Erst testen! Schützt vor meinen Schreib- und deinen Lesefehlern.
Gruß
ernohl

Benutzeravatar
jd
Beiträge: 286
Registriert: 01.07.2003 12:02:33
Wohnort: D->Hessen->MKK

Beitrag von jd » 11.07.2003 16:41:08

Und zum Schluß noch dieses nette rename-tool. Es nutzt die regex zum Umbenennen, quasi ein sed für's renaming.:D

http://developer.berlios.de/projects/rename/

by the way: ein .deb kann ich zur Not beisteuern. :D

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 11.07.2003 19:28:05

cool, 4 tipps auf einmal, werd ich mir alles mal anschauen.
bedankt,
startx.

rup
Beiträge: 5
Registriert: 10.07.2002 07:34:12

Beitrag von rup » 11.07.2003 19:40:33

Dafuer hab ich mir folgendes Perl-Skript gebastelt. Mir dem Parameter -R wird recursive alle Unterverzeichnisse umbenannt (Skript ev. oefter aufrufen, da noch nicht fertig). Das Skript laest sich sicher an deine Beduerfnisse anpassen.
Achtung ich bin ein ganz miesser Perl-Coder :cry: aber vielleicht hilfts trotzdem



Code: Alles auswählen

#!/usr/bin/perl -w 

use File::Find;
use File::Copy;   
use Cwd;           # fuer die Funktion cwd (current working directory)



sub EinzelneDateiVerarbeiten {
 #next if $file =~ /^\.\.?$/;

 $DateinameAlt=$_;
 $DateinameNeu='';
 
 foreach $Zeichen (split // , $DateinameAlt){
  
  # Deutsche Umlaute und Scharfes "ß"
  if   (ord($Zeichen) == 196){$DateinameNeu = $DateinameNeu . 'Ae';} # Ä hex = d4 
  elsif(ord($Zeichen) == 228){$DateinameNeu = $DateinameNeu . 'ae';} # ä hex = e4
  elsif(ord($Zeichen) == 214){$DateinameNeu = $DateinameNeu . 'Oe';} # Ö hex = d6
  elsif(ord($Zeichen) == 246){$DateinameNeu = $DateinameNeu . 'oe';} # ö hex = f6
  elsif(ord($Zeichen) == 220){$DateinameNeu = $DateinameNeu . 'Ue';} # Ü hex = dc
  elsif(ord($Zeichen) == 252){$DateinameNeu = $DateinameNeu . 'ue';} # ü hex = fc
  elsif(ord($Zeichen) == 223){$DateinameNeu = $DateinameNeu . 'ss';} # ß hex = df
             
  # Deutsche Umlaute und Scharfes "ß" anderer Zeichensatz
  elsif(ord($Zeichen) == 142){$DateinameNeu = $DateinameNeu . 'Ae';} # Ä hex = 8e
  elsif(ord($Zeichen) == 132){$DateinameNeu = $DateinameNeu . 'ae';} # ä hex = e4
  elsif(ord($Zeichen) == 153){$DateinameNeu = $DateinameNeu . 'Oe';} # Ö hex = 99
  elsif(ord($Zeichen) == 148){$DateinameNeu = $DateinameNeu . 'oe';} # ö hex = f6
  elsif(ord($Zeichen) == 154){$DateinameNeu = $DateinameNeu . 'Ue';} # Ü hex = dc
  elsif(ord($Zeichen) == 129){$DateinameNeu = $DateinameNeu . 'ue';} # ü hex = fc
  # elsif(ord($Zeichen) == 223){$DateinameNeu = $DateinameNeu . 'ss';} # ß hex = df
  elsif(ord($Zeichen) == 239){$DateinameNeu = $DateinameNeu . 'i' ;} # ï hex = ef
  elsif(ord($Zeichen) == 237){$DateinameNeu = $DateinameNeu . 'i' ;} # í hex = ed
  elsif(ord($Zeichen) == 225){$DateinameNeu = $DateinameNeu . 'a' ;} # á hex = e1
  elsif(ord($Zeichen) == 233){$DateinameNeu = $DateinameNeu . 'e' ;} # é hex = e9
  elsif(ord($Zeichen) ==  34){$DateinameNeu = $DateinameNeu . '_' ;} # " hex = 
  elsif(ord($Zeichen) ==  39){$DateinameNeu = $DateinameNeu . '_' ;} # ' hex = 
  elsif(ord($Zeichen) == 241){$DateinameNeu = $DateinameNeu . 'n' ;} # ñ hex = 
  elsif(ord($Zeichen) == 180){$DateinameNeu = $DateinameNeu . '_' ;} # ´ hex = b4
  #Satzzeichen Entfernen
  elsif($Zeichen =~ ',' ){} 
  elsif($Zeichen =~ ';' ){} 
  elsif($Zeichen =~ '\?'){}
  elsif($Zeichen =~ '!' ){} 
  elsif($Zeichen =~ ':' ){} 
  elsif($Zeichen =~ '\`'){} 
  
  # Zeichen ersetzen
  elsif($Zeichen =~ ' ' ){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '~' ){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '&' ){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '#' ){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\^'){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\@'){$DateinameNeu = $DateinameNeu . '_At_';}
 
  # Klammern
  elsif($Zeichen =~ '\('){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\)'){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\{'){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\}'){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\['){$DateinameNeu = $DateinameNeu . '_';}
  elsif($Zeichen =~ '\]'){$DateinameNeu = $DateinameNeu . '_';}
  
  # Alle anderen Zeichen unveraendert ausgeben
  else {$DateinameNeu = $DateinameNeu . $Zeichen;}
 }



 # Ersetzen von Zeichenketten z.B. _-_ durch ein einfaches _
 for($i=1;$i<=5;$i++){
  $DateinameNeu =~ s/_-_/_/;
  $DateinameNeu =~ s/-_-/_/;
  $DateinameNeu =~ s/-_/_/;
  $DateinameNeu =~ s/_-/_/;
  $DateinameNeu =~ s/--/_/;
  $DateinameNeu =~ s/---/_/;
  $DateinameNeu =~ s/__/_/;
  $DateinameNeu =~ s/___/_/;
  $DateinameNeu =~ s/\.\./\./;
 }
  $DateinameNeu =~ s/PDF/pdf/;
  $DateinameNeu =~ s/JPG/jpg/;
  $DateinameNeu =~ s/MP3/mp3/;
  $DateinameNeu =~ s/MPG/mpg/;
  $DateinameNeu =~ s/GIF/gif/;
  $DateinameNeu =~ s/HTM/htm/;
  #$DateinameNeu =~ s/HTML/html/; # Achtung HTML Dateien mit kleiner Endung, LINKS!!!
  # _ oder - am Anfang entfernen Tritt bei Dateien auf die Mit Klammern beginnen
  $DateinameNeu =~ s/^-//;
  $DateinameNeu =~ s/^_//;
  # _ oder - am Ende entfernen
  $DateinameNeu =~ s/-$//;
  $DateinameNeu =~ s/_$//;
  # _ oder - vor Endungen z.B. _.mpg -.mpg
  $DateinameNeu =~ s/-\././;
  $DateinameNeu =~ s/_\././;
  # kommt z.B. bei "01. Lied" -> "01._Lied" vor 
  $DateinameNeu =~ s/\._/-/;
  
  ### Achtung alle Dateien kleichschreiben !!!
  # $DateinameNeu="\L$DateinameNeu";
 
 
 
 if($DateinameAlt ne $DateinameNeu){ #Falls der Dateiname geaendert werden soll
  if( -e $DateinameNeu){ #Falls es den zukuenftigen Dateinamen schon giebt, Fehlermeldung und Logifle
   print cwd() . "/$DateinameNeu           gibt es schon, sie wird nicht umbenannt.\n\a";
   $errorlog = $STARTDIR . "/error.log";   
   open(ERR,">> $errorlog");  # Logdatei in dem Verzeichnis oeffnen in dem das Skript aufgerufen wurde
   print ERR cwd() . "/$DateinameNeu       gibt es schon, sie wird nicht umbenannt.\n";
  } else { # Datei verschieben 
   move($DateinameAlt,$DateinameNeu) or die "Datei verschieben Fehlgeschlagen: $!";
  }
 }
}



$STARTDIR = cwd(); # Verzeichnis in dem das Skript aufgerufen wurde

$ARGV[0] ||= ''; # Variable definieren falls kein Parameter uebergeben, damit "perl -w" keinen Fehler ausgibt 
if($ARGV[0] =~ '-R'){  # Rekusrsive Verarbeitung
 find(\&EinzelneDateiVerarbeiten, $STARTDIR); # Rekursive alle Dateien finden und der Funktion "EinzelneDateiVerarbeiten" uebergeben
} else {               # Nur aktuelles Verzeichnis verarbeiten
 opendir(DIR, $STARTDIR) or die "Konnte Verzeichnis $STARTDIR nicht oeffnen: $!";
 
 while (defined($file=readdir(DIR))){
  next if $file =~ /^\.\.?$/;
  $_=$file;
  EinzelneDateiVerarbeiten(); 
 }
} 

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 11.07.2003 22:22:06

startx, hier kommt noch ein Tipp: mmv.

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 12.07.2003 14:01:39

Hab da mal ein python skript geschrieben. Werde das morgen mal posten.

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 12.07.2003 15:27:25

hupfdule hat geschrieben:Hab da mal ein python skript geschrieben. Werde das morgen mal posten.
Kannst ja hier einen Hinweis aus das Script posten, und das Script selbst im Wiki veröffentlichen.

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 12.07.2003 21:11:24

Hab das Skript erst mal hier abgelegt. Wenn es von Interesse ist, kann ich es auch gern ins Wiki stellen. Ich frage mich nur gerade wo....

Antworten