Gibt es eine Möglichkeit, alle Dateierweiterungen aller Dateien in einem Ordner schnell zu ändern?

14

Ich habe einen großen Ordner mit .m4b-Hörbüchern, die in ihrem aktuellen Format auf meinem Android-Handy nicht wiedergegeben werden können. Sie funktionieren jedoch einwandfrei, wenn sie in .m4a umbenannt werden

Gibt es eine schnelle Methode oder einen Terminalbefehl, mit dem jede .m4b-Datei in einem Ordner in .m4a umbenannt werden kann? Es ist keine Konvertierung der Dateien erforderlich. Das Umbenennen der Dateierweiterung funktioniert einwandfrei.

Titelbild
quelle
2
FYI: renameist ein PERL-Skript und akzeptiert reguläre Ausdrücke. Debian-Systeme haben auch einen rename.ulBefehl als Teil der util-linux-ng package. Wenn Perl nicht installiert ist (ok, sehr unwahrscheinlich;)) renameist auch nicht.
Rinzwind

Antworten:

16

Dies erledigt die Arbeit für Sie.

rename 's/.m4b$/.m4a/' *.m4b

Für einen Testlauf können Sie diesen Befehl verwenden:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v bedeutet "ausführlich" und gibt die Namen der Dateien aus, wenn sie umbenannt werden.

-n führt einen Testlauf durch, bei dem keine Dateien umbenannt werden. Es wird jedoch eine Liste der Dateien angezeigt, die umbenannt werden würden.

Basharat Sialvi
quelle
Viel bessere Antwort als meine. Ich war faul und habe versucht, keine regulären Ausdrücke zu verwenden ...
adempewolff
Danke, funktioniert ein Vergnügen. Vielen Dank an @adempewolff für die Mühe auch
Titelbild
10

Eine sehr schnelle Möglichkeit, Dateien umzubenennen, wenn dies alles ist, was Sie tun müssen und nicht in ein anderes Format konvertieren müssen, ist die Verwendung der Bash-Parametererweiterungen, die im Bash-Wiki sehr ausführlich beschrieben werden .

Es gibt verschiedene Möglichkeiten, die Erweiterung zu ändern, aber ich verwende hier das einfache ${var/original/replacement}Paradigma:

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

Wenn Sie sehen möchten, was durch den Befehl geändert wird, platzieren Sie echovor mvund die Änderungen werden aufgelistet.

Selbstverständlich kann dieser Oneliner auch für andere Dateien geändert werden, und Sie können auch Parametererweiterungen verwenden, um Dateierweiterungen zu entfernen.


quelle
+1 Dieser Weg funktioniert genauso wie die Antwort von @Basharat Sial, außer dass er auch funktioniert, wenn Sie viele passende Dateien haben *.m4b. Andernfalls werden Sie den Fehler treffen argument list too long.
Matt Burns
Um zu sehen, wie es passiert, fügen Sie die verbose Flagge hinzu:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt burns