Existe-t-il un moyen de modifier rapidement toutes les extensions de fichier de tous les fichiers d'un dossier?

14

J'ai un grand dossier de livres audio .m4b qui, dans leur format actuel, ne seront pas lus sur mon téléphone Android. Cependant, ils fonctionnent bien s'ils sont renommés en .m4a

Existe-t-il une méthode rapide ou une commande de terminal qui peut renommer chaque fichier .m4b d'un dossier en .m4a? Il n'est pas nécessaire de convertir les fichiers, simplement renommer l'extension de fichier fonctionne parfaitement.

couverture
la source
2
Pour info: renameest un script PERL et accepte les expressions régulières. Les systèmes Debian ont également une rename.ulcommande dans le util-linux-ng package. Si perl n'est pas installé (ok, très peu probable;)) renamene l'est pas non plus.
Rinzwind

Réponses:

16

Cela fera le travail pour vous.

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

Pour un essai, vous pouvez utiliser cette commande:

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

-v signifie "verbeux" et il affichera les noms des fichiers lorsqu'il les renommera.

-n fera un test où il ne renommera aucun fichier, mais vous montrera une liste de fichiers qui seraient renommés.

Basharat Sialvi
la source
Réponse bien meilleure que la mienne. J'étais paresseux et j'essayais de ne pas utiliser d'expressions régulières ...
adempewolff
Merci, ça fait plaisir. Merci aussi à @adempewolff pour l'effort
covernail
10

Un moyen très rapide de renommer des fichiers, si c'est tout ce que vous avez à faire et que vous n'avez pas besoin de les convertir dans un autre format, est d'utiliser les extensions de paramètres de Bash, qui sont très bien détaillées sur le wiki Bash .

Il existe plusieurs façons de modifier l'extension, mais j'utilise ici le ${var/original/replacement}paradigme simple :

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

Si vous souhaitez voir ce qui serait modifié par la commande, placez-le echoavant mvet les modifications seront répertoriées.

Inutile de dire que cet oneliner pourrait également être modifié pour d'autres fichiers, et vous pouvez également utiliser des extensions de paramètres pour supprimer également les extensions de fichier.


la source
+1 Cette méthode fonctionne de la même manière que la réponse de @Basharat Sial, sauf que cela fonctionnera également lorsque vous avez beaucoup de fichiers correspondant *.m4b. Sinon, vous frapperez l'erreur argument list too long.
matt burns
Aussi, pour le voir se produire, ajoutez le drapeau verbeux:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt burns