Batch Dateiumbenennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
crack
Beiträge: 615
Registriert: 19.08.2003 12:20:26
Lizenz eigener Beiträge: GNU General Public License
Wohnort: München
Kontaktdaten:

Batch Dateiumbenennen

Beitrag von crack » 20.01.2004 19:48:52

Hi,

also ich habe 2 kleine Probleme:
1.) In einem Verzeichniss alle " " in "_" umzubenennen. Ich komme mit rename irgendwie nicht klar.

2.) In allen Dateien die einer bestimmen Form entsprechen, z.B. abcde*.abc, nach der 3ten Stelle ein 123 in den Dateinamen einfügen.

Da habe ich noch nichts gefunden.

Vielen Dank Benny

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

Beitrag von jd » 20.01.2004 20:14:25

Schau Dir mal http://rename.berlios.de/ an. Dieses nette kleine Tool macht genau das. Du kannst mit wildcards eine Gruppe von files auswählen, und dann mit einer sed-ähnlichen suche+ersetze Option Textstellen in der selektierten Teilen ersetzen. Das geht wunderbar. Zu allem überfluß kann man die Filenamen auch komplett auf klein- oder Großbuchstaben umstellen.

Wenn Du dazu ein inoffiziellen Debianpaket haben willst, dann schicke mir einfach eine PM.

Code: Alles auswählen

rename -s/foo/bar/ *.png
...ersetzt foo gegen bar für alle .png in aktuellen Verzeichnis.

Benutzeravatar
larus
Beiträge: 587
Registriert: 03.11.2003 13:11:12
Wohnort: Wil (Schweiz)
Kontaktdaten:

Beitrag von larus » 20.01.2004 20:16:43

Das alles geht viel einfacher mit dem Kommando mmv statt mv. Hierzu den Link:
http://www.linux-user.de/ausgabe/2001/0 ... umzug.html

Viel Spass

ggl larus
larus: die Mo:we

http://peter.l2p.net/ - Die Seite, die du brauchst.

Benutzeravatar
crack
Beiträge: 615
Registriert: 19.08.2003 12:20:26
Lizenz eigener Beiträge: GNU General Public License
Wohnort: München
Kontaktdaten:

Beitrag von crack » 20.01.2004 21:05:15

@jd
Also ich habe das Tool runtergeladen und kopiliert aber es behauptet die Option "s" nicht zu kennen.

@larus
mmv hört sich soweit gut an aber ich packe es nciht zu ersetzen und wie ich einen String an einer bestimmen Stelle einfügen kann ist mir auch ein Rätzel. Davon sehe ich in der manpage leider nichts.

Benny

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 21.01.2004 13:27:41

hier wäre eine kleine Lösung für Problem 1 (bash):

Code: Alles auswählen

for a in *;do b=${a// /_}; if [ "$a" != "$b" ]; then mv "$a" $b; fi; done
und hier eine Lösung für Problem 2 (auch bash):

Code: Alles auswählen

 for a in *;do b="${a:0:3}123${a:3}"; mv "$a" "$b"; done
Du musst nur ins entsprechende Verzeichnis wechseln und die Muster anpassen (*)...
Sollte bei Problem 2, der Dateiname kürzer als 3 Zeichen sein, wird 123 einfach hinten dran gehängt.

cu,
bitbieger

Benutzeravatar
crack
Beiträge: 615
Registriert: 19.08.2003 12:20:26
Lizenz eigener Beiträge: GNU General Public License
Wohnort: München
Kontaktdaten:

Beitrag von crack » 21.01.2004 14:10:02

Ja geil!!!
Sowas hatte ich mir gewünscht.
Daraus lernt man sogar noch was.

Danke bitbieger!!!

EDIT:
Kennt jemand ein guten Stringoperationen Tutorial für bash? Eine ausführliche Befehlsreferenz reicht mir auch. Auf sowas einfaches wie "${a:0:3}123${a:3}" kommt man halt nicht so schnell.

EDIT2:
Hier der Link zu einer super Befehlsreferenz:
http://www.tldp.org/LDP/abs/html/

Benny

Benutzeravatar
crack
Beiträge: 615
Registriert: 19.08.2003 12:20:26
Lizenz eigener Beiträge: GNU General Public License
Wohnort: München
Kontaktdaten:

Beitrag von crack » 11.02.2004 18:06:05

Ich habe ein neues Problem:
Wie benenne ich von "_" in " " um?

Code: Alles auswählen

for a in *;do b=${a//_/ }; if [ "$a" != "$b" ]; then mv "$a" $b; fi; done
tut nicht das was ich will, es macht garnichts.

Nochwas:
bei sowas :
${a:0:12}
kann ich da auch den ganzen ausdruck umdrehen und von hinten sachen ersetzen?

Danke Benny

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 12.02.2004 09:05:35

crack hat geschrieben:Ich habe ein neues Problem:
Wie benenne ich von "_" in " " um?
Hi,

das $b muss in diesem Fall in Anführungszeichen stehen. Die zukünftige Datei hat ja Leerzeichen ;)

Code: Alles auswählen

for a in *;do b=${a//_/ }; if [ "$a" != "$b" ]; then mv "$a" "$b"; fi; done
crack hat geschrieben:Nochwas:
bei sowas :
${a:0:12}
kann ich da auch den ganzen ausdruck umdrehen und von hinten sachen ersetzen?
Die Bash-Doku sagt zu

Code: Alles auswählen

${parameter:offset:length}
Ist offset eine negative Zahl, so bezieht sich der Offset auf das Ende von parameter.

Du siehst also, Doku lesen zahlt sich aus :D

cu,
bitbieger

Antworten