有没有一种方法可以快速更改文件夹中所有文件的所有文件扩展名?


14

我有一个很大的.m4b有声读物文件夹,当前格式无法在我的Android手机上播放。但是,如果将它们重命名为.m4a,它们确实可以正常工作

有没有一种快速的方法或终端命令可以将文件夹中的每个.m4b文件重命名为.m4a?不需要任何文件转换,只需重命名文件扩展名即可。


2
仅供参考:rename是PERL脚本,接受正则表达式。Debian系统也将rename.ul命令作为的一部分util-linux-ng package。如果未安装perl(好的,可能性很小;))rename也没有安装。
Rinzwind

Answers:


16

这将为您完成工作。

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

要进行测试运行,可以使用以下命令:

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

-v 表示“详细”,重命名文件时将输出文件名。

-n 将在不重命名任何文件的情况下进行测试运行,但会向您显示将被重命名的文件列表。


答案比我的要好得多。我很懒,尝试不使用正则表达式...
adempewolff 2012年

谢谢,请客。也感谢@adempewolff所做的努力
Coversnail 2012年

10

重命名文件的一种快速方法(如果您要做的就是将其重命名,并且不需要将其转换为另一种格式)是使用Bash的参数扩展,Bash Wiki上对此进行了详细介绍。

更改扩展名有几种不同的方法,但是我在这里使用了简单的${var/original/replacement}范例:

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

如果要查看该命令将要更改的内容,请放在echo之前,mv并列出更改。

不用说,也可以为其他文件修改此oneliner,也可以使用参数扩展名来删除文件扩展名。


+1这种方法与@Basharat Sial的答案相同,不同之处在于当您有许多文件匹配时,它也将起作用*.m4b。否则,您将遇到错误argument list too long
马特

另外,要观看它的发生,请添加详细标志:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
马特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.