Du bist nicht angemeldet.

#1 10.11.2008 12:14:24

Tauryn
Mitglied

Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Ich bin gerade dabei in meiner Musiksammlung ein bischen aufzuräumen. Die Dateien liegen da leider ab und zu als "01_interpret_-_lied_name.ogg" vor. Ziel soll es sein, dass die Dateien als
"01 - Lied Name.ogg" vorliegen.

die Unterstriche habe ich mit

for i in *.ogg ; do mv "$i" "${i/_/ } ; done

halbwegs wegbekommen, wobei ich den Befehl mehrere male ausführen musste, weil immer nur das jeweils erste "_"-Zeichen im Dateinamen gelöscht wurde. Gibt es da eine bessere Methode?

den Interpreten habe ich mit

for i in *.ogg ; do mv "$i" "${i/interpret/} ; done

gelöscht. Das hat auch super geklappt.

jetzt weis ich nur leider überhaupt nicht wie ich "lied name" in "Lied Name" umändern kann. Hat jemand da eine Idee?

lg Tauryn

Offline

#2 10.11.2008 13:04:06

badboy
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

für massenhaftes Umbennen nutze ich das mir aus Ubuntu-Zeiten bekannte prename (im AUR unter diesem Namen zu finden)
das ist nicht's weiter als ein kleines Perl-Skript, funktioniert aber wunderbar

wie man nun damit Kleinbuchstaben in Großbuchstaben umwandelt, muss ich noch mal gucken (Perl und seine Regexe sind nicht unbedingt mein Spezialgebiet, nur so einfache Ausdrücke krieg ich da hin^^)

Beitrag geändert von badboy (10.11.2008 13:04:17)

Offline

#3 10.11.2008 15:20:48

bluewind
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Tauryn schrieb:
for i in *.ogg ; do mv "$i" "${i/_/ } ; done

halbwegs wegbekommen, wobei ich den Befehl mehrere male ausführen musste, weil immer nur das jeweils erste "_"-Zeichen im Dateinamen gelöscht wurde. Gibt es da eine bessere Methode?

Ich habs mal so gemacht aber das geht sicher einfacher:

for i in *; do echo $(echo $i | sed "s/_/ /g"); done
das g macht dass es so oft wie möglich (global) ersetzt wird

(anpassen für .ogg und mv)

Beitrag geändert von bluewind (10.11.2008 15:21:39)

Offline

#4 10.11.2008 23:54:04

Tauryn
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Der Script ist gut bluewind smile

Für alle die es interessiert, meine Anpassung sieht so aus:

for i in *.ogg ; do mv $i  $(echo $i | sed "s/_/ /g"); done

@BadBoy_
ich hatte gehofft, dass ich das alles in der Shell erledigen kann, aber wenn es nicht anders geht
werd ich mir das Programm mal anschauen smile

Danke an euch schonmal für die Tips

Offline

#5 11.11.2008 09:09:39

the_isz
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Also meiner Meinung nach sollte das alles mit sed möglich sein. Hab leider gerade keine Zeit, daher nur ne vorläufige Lösung:

for i in *.ogg; do mv $i $(echo $i | sed 's/\([0-9]*\)[^-]*-_\(.*\)/\1\ -\ \2/' | sed 's/_/ /g'); done

Die wandelt das Ganze schonmal so um wie Du's brauchst, nur das Großschreiben der ersten Buchstaben kann's noch nicht.

Wenn sich bis heute Abend noch kein sed Guru gemeldet hat, setz ich mich nochmal dran smile

Bis denne!

*edit sagt: Fehler behoben, Interpret darf kein '-' enthalten

*edit2:

Wie angedroht, da bin ich wieder. Da sich kein sed Guru gemeldet hat, übernehm ich das wohl mal eben... *Ärmel hochkrempel* Es ist bißchen unübersichtlich geworden, aber so sollte es genau das tun, was Du haben willst. Ich schreibe mal nur das sed Kommando, die for Schleife steht ja noch oben:

sed \
  -e 's/\([0-9]*\)[^-]*-_\(.*\)/\1\ -\ \2/' \
  -e 's/_/ /g' \
  -e 's/\b\(\w*\)\b/\u\1/g' \
  -e 's/\.Ogg$/\.ogg/'

Man kann das natürlich auch in eine Zeile schreiben, dafür dann einfach die '\' am Ende jeder Zeile weglassen.

Erklärung:

  • Der erste Ausdruck entfernt den Interpreten (der immer noch kein '-' enthalten darf!) sowie die '_' vor dem Titel.

  • Der zweite Ausdruck ersetzt die übrig gebliebenen '_' im Dateinamen durch Leerzeichen.

  • Der dritte Ausdruck macht den ersten Buchstaben jedes Wortes groß (tut bei der Track Nummer nicht weh), dazu zählt aber auch das '.ogg' am Ende. Wenn es Dir egal ist, ob Deine Dateien mit '.ogg' oder '.Ogg' enden, kannst Du den vierten Ausdruck weglassen, denn

  • der vierte Ausdruck verwandelt die Dateiendung wieder komplett in Kleinbuchstaben.

So, viel Spaß mit Deinen umbenannten Dateien. Ich hoffe, ich hab mir die Arbeit nicht umsonst gemacht. Naja, ganz umsonst wird's net gewesen sein, Übung macht ja schließlich den Meister lol

Schöne Grüße

Beitrag geändert von the_isz (11.11.2008 19:12:29)

Offline

#6 11.11.2008 22:33:35

Tauryn
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Boa smile geil smile Vielen Dank!
Da fang ich doch gleich morgen in der Vorlesung an meine Dateien umzubennennen. Und vollziehe gleich noch den Syntax nach.

Offline

#7 12.11.2008 22:36:29

the_isz
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Tauryn schrieb:

Boa smile geil smile Vielen Dank!
Da fang ich doch gleich morgen in der Vorlesung an meine Dateien umzubennennen. Und vollziehe gleich noch den Syntax nach.

Ich hoffe, es hat alles funktioniert wie geplant lol

Offline

#8 16.11.2008 23:08:24

Tauryn
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

jup smile hat super funktioniert.
Nur leider verstehe ich nicht genau, was die einzelnen scripts machen. *g*

Offline

#9 17.11.2008 08:58:47

the_isz
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Tauryn schrieb:

jup smile hat super funktioniert.
Nur leider verstehe ich nicht genau, was die einzelnen scripts machen. *g*

Hatte ich doch oben geschrieben!? Wenn Du wissen willst, was genau welcher Ausdruck bedeutet, empfehle ich Dir, Dich mit einem Tutorial über reguläre Ausdrücke zu beschäftigen. Die Info Page von sed ist da ein ganz guter Anlaufpunkt, nur wird diese leider unter Arch nicht mit installiert hmm

Offline

#10 17.11.2008 10:04:23

badboy
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

übrigens sollten die einzelnen regulären Ausdrücke, wie the_isz sie gepostet hat, auch mit prename funktionieren. Damit würd die Bash-for-Schleife entfallen *ggg*

Offline

#11 01.12.2008 10:03:13

Dirk
Moderator

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Tauryn schrieb:

Ich bin gerade dabei in meiner Musiksammlung ein bischen aufzuräumen. Die Dateien liegen da leider ab und zu als "01_interpret_-_lied_name.ogg" vor. Ziel soll es sein, dass die Dateien als
"01 - Lied Name.ogg" vorliegen.

Anstatt an der Shell rumzubasteln, benutze doch einfach EasyTag (ist in extra), das hat bereits eine solche Funktion integriert.

http://easytag.sourceforge.net/

Offline

#12 01.12.2008 19:07:49

the_isz
Mitglied

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

Dirk Sohler schrieb:

Anstatt an der Shell rumzubasteln, benutze doch einfach EasyTag (ist in extra), das hat bereits eine solche Funktion integriert.

http://easytag.sourceforge.net/

Das Programm ist tatsächlich ziemlich gut, ich verwende es auch gelegentlich. Allerdings arbeitet es halt automatisiert nicht so zuverlässig. Oft werden falsche Tracknamen / Interpreten erkannt, das Album falsch zugeordnet oder ähnliches. Wenn die Dateinamen - wie im Fall des Autors - schon alle benötigten Informationen beinhalten, kann man es auch vollständig und risikolos mit einem Shell Skript automatisieren und man lernt gleich noch was dabei wink

Offline

#13 01.12.2008 21:24:52

Dirk
Moderator

Re: Shell: Unterstriche in Dateinamen löschen und kleine in Großbuchstaben verwandeln

the_isz schrieb:

[…] und man lernt gleich noch was dabei wink

Worauf es hier wohl hauptsächlich ankommt – Zumal man das Rad ja nicht jedes Mal neu erfinden sollte smile Denn bei so strukturiert eindeutigen Dateinamen leistet EasyTag ebenfalls ganze Arbeit.

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums