Ich habe Verzeichnisse mit .MP3-Dateien, deren Erweiterungen ich gerne in .mp3 ändern möchte. Wie geht das am einfachsten? Ich denke etwas in der Art von:
find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/1.mp3/ ;
… obwohl ich weiß, dass das nicht ganz richtig ist. 🙂 Die Ersetzung ist nicht korrekt und ich bin mir nicht sicher, wie ich sowohl ein mv
verwenden soll und ein sed
Befehl mit -exec
in find
.
Brauche ich dafür ein Bash-Skript?
Akzeptierte Antwort:
Hier ist eine Möglichkeit, dies in Bash zu tun:
for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done
Ich habe echo
verwendet Hier macht der Befehl selbst also nichts anderes, als Paare von Dateinamen auszugeben. Wenn diese Liste die Änderungen darstellt, die Sie vornehmen möchten, können Sie echo
ändern zu etwas wie mv -i --
was dann Ihre Dateien verschiebt (und Sie vor dem Überschreiben auffordert).
Kurze Erklärung:
Der for
iteriert durch jede Datei, die mit *
übereinstimmt . Dann stellen wir fest, ob die Erweiterung bereits in Kleinbuchstaben geschrieben ist, wenn ja, fahren wir fort, wenn nicht, verschieben wir sie (oder geben sie gegebenenfalls wieder). Dies verwendet Bashs eingebaute String-Operationen, über die Sie hier lesen können:http://tldp.org/LDP/abs/html/string-manipulation.html