# Shell mp3 renaming



## Bgag (17. Mai 2009)

Hallo!

Ich habe ein kleines Problem. Ich möchte ein Shell-Script schreiben, dass ich mit einem Ordnernamen aufrufen kann, dass mir dann alle mp3-Dateien in diesem Ordner nach bestimmten Regeln umbenennt.


Punkte, Leerzeichen und Bindestriche durch Unterstriche ersetzen
hintereinander stehende Unterstriche durch einen Unterstrich ersetzen
Zahlen und Unterstriche am Anfang des Dateinamens ersetzen
alle Dateinmane klein schreiben
Dateiendung von _mp3 zu .mp3 korrigieren

Zudem soll es einen optionalen Parameter -r geben, der es ermöglich den Befehl auch auf alle unterverzeichnisse anzuwenden.

Ich habe einen ersten Entwurf gemacht, der leider nicht funktioniert. kann mir jemand helfen?

Zudem hätte ich noch eine Frage die abschließende Verwendung betreffend. Reicht es die fertige Bash-Datei in den /lib/ Ordner zu verschieben, damit ich mit ihr überall arbeiten kann ohne sie mit bash aufzurufen? Wird dann beim arbeiten auch immer das aktuelle verzeichnis verwendet?

MfG, Andy


```
for i in "*.[mM][pP]3";
do
        # convert uppercase to lowercase
        n=$(echo $i | tr [:upper:] [:lower:])

        # replace whitespaces with underscores
        $n=$(echo $n | tr [:blank:] _)

        # replace dots with underscores
        $n=$(echo $n | tr . _)

        # replace hypens with underscores
        $n=$(echo $n | tr - _)

        # replace multiple underscores
        $n=$(echo $n | tr -s _)

        # remove numbers at the beginning
        $n=$(echo $n | sed 's/^[0-9]*//')

        # remove underscores at the beginning
        $n=$(echo $n | sed 's/^\_//')

        # correct file ending
        $n=4(echo $n | sed 's/\_mp3/\.mp3/')

        # rename file
        mv -v "$i" "$n";
done
```


----------



## deepthroat (22. Mai 2009)

Hi.





Catull hat gesagt.:


> Ich habe einen ersten Entwurf gemacht, der leider nicht funktioniert. kann mir jemand helfen?


Was heißt das? Was genau funktioniert denn nicht?


Catull hat gesagt.:


> Zudem hätte ich noch eine Frage die abschließende Verwendung betreffend. Reicht es die fertige Bash-Datei in den /lib/ Ordner zu verschieben, damit ich mit ihr überall arbeiten kann ohne sie mit bash aufzurufen?


Nein. Ein Skript hat nichts in einem lib Ordner zu suchen - der ist für Bibliotheken.

Um das Skript aufrufen zu können, muss man es ausführbar machen (chmod +x datei) und in ein Verzeichnis speichern welches in der Umgebungsvariable PATH eingetragen ist. Also z.B. /usr/bin

Außerdem sollte das Skript eine entsprechende Shebang Zeile am Anfang haben, damit es mit dem richtigen Interpreter ausgeführt wird.


Catull hat gesagt.:


> Wird dann beim arbeiten auch immer das aktuelle verzeichnis verwendet?


Ja, das Verzeichnis wird nicht gewechselt.

Gruß


----------

