Rekursives Ändern einer bestimmten Dateiendung

DeeDee0815

DeeDee0815

Doppel-As
Hallo Leute,

ich habe meine Musiksammelung komplett im Ogg-Vorbis-Format gespeichert. Seit neustem neigen aber alle möglichen Programme dazu, Ogg-Audio Dateien nicht mehr mit der "allgemeinen" Endung *.ogg abzuspeichern, sondern nehmen *.oga (beispielsweise Rhythmbox beim Auslesen einer CD). So will ich nun meine gesamte Musiksammelung umbenennen.

Ich benötige also ein Shell-Skript, welches Rekursiv in allen Ordnern $name.ogg ind $name.oga umbenennt.

Wahrscheinlich ganz einfach, aber ich kenne mich nicht so gut mit Shell-Sktipts aus, daher bin ich auf eure Hilfe angewiesen. ;-)

Viele liebe Grüße und frohe Weihnachten wünscht DeeDee0815
 
Code:
find /your/music -name '*.oga'|while read file; do
    echo "$file" "${file/.oga/.ogg}"
done
Aus "echo" mache man ein "mv", wenns die gewünschte Ausgabe erzeugt.
Mit exec wüsst ich nicht, wie man das mit der brace-expansion gut hinbekommen würde. Und die Substitution funktioniert glaube ich nur, wenn innerhalb des Dateinamens kein ".oga" vorkommt. Also es sollte keine Dateien geben wie "foo.oga.bar.oga" (was ja ein völlig legaler Dateiname ist).

edit: mit regex könnte man das "sauberer" machen, wenn du dir nicht sicher bist, ob es nicht files mit ".oga" drin gibt (oder gar ein verstecktes Verzeichnis namens "oga", wer weiß...)

edit: after careful consideration, while-read is a better combination in this case. (than for)
btw die brace-expansion ist bash. kA ob das auch in der korn-shell funktioniert. (in der zsh gibt es auf jeden Fall Alternativen, ist nur die Frage ob die Syntax dann übereinstimmt.)
 
Zuletzt bearbeitet:
Hi,

Und die Substitution funktioniert glaube ich nur, wenn innerhalb des Dateinamens kein ".oga" vorkommt. Also es sollte keine Dateien geben wie "foo.oga.bar.oga" (was ja ein völlig legaler Dateiname ist).

du musst in dem Fall ja auch nicht unbedingt Ersetzen, du kannst auch einfach das Dateiende abtrennen, und dann das gewuenschte Ende wieder dranhaengen:
Code:
$ file=bla.oga.blub.oga
$ echo ${file%.oga}.ogg
bla.oga.blub.ogg

Nur so am Rande.

Edit:
Da fehlte noch ein Dollarzeichen im Code...

mfg,
bytepool
 
Zuletzt bearbeitet:
Hallo ihr beiden,

besten dank für eure Hilfe, mit dem ersten Vorschlag konnte ich das Problem einwandfrei lösen, hat alles geklappt. Mit dem zweiten konnte ich leider nichts anfangen, denn als ich den Teil aus dem ersten entsprechend ersetzte, kam keine geänderte Dateiendung, sondern einfach der Ausdruck als Dateiname dabei heraus.

Vielen Dank und frohe Weihnachten,
DeeDee0815
 
Code:
${file%.oga}
Joar, ich wusste doch, dass da noch was war. Am besten übrigens noch doublequotes drummachen, dann ists "failsafe".
Code:
"${file%.oga}.ogg"


edit:
Mit dem zweiten konnte ich leider nichts anfangen, denn als ich den Teil aus dem ersten entsprechend ersetzte, kam keine geänderte Dateiendung, sondern einfach der Ausdruck als Dateiname dabei heraus.
bytepool hat das Dollarzeichen vergessen.
 
Zuletzt bearbeitet:
Ebenfalls auch nochmal meinen Dank für diesen Hinweis.

Frohe Weihnachten!
 
Zurück
Oben