更改包含特定字符串的所有文件名的扩展名

更改包含特定字符串的所有文件名的扩展名

当我得到一个名称包含字符串“x264”的文件时,我希望将其扩展名更改为“.mp4”(原因太详细,无法在此处解释)。例子:

Seinfeld_S02E05_x264.mkv ->Seinfeld_S02E05_x264.mp4

Seinfeld_S02E05_x264.avi ->Seinfeld_S02E05_x264.mp4

我可以使用什么脚本来自动进行此类更改?我的电脑是运行 FreeBSD 11.1 的 NAS4FREE 服务器

更新(在杰夫的回应之后):我忘了提及我希望它也能在指定目录及其所有子目录中工作。也许是命令而不是脚本?

答案1

for f in *x264*.*
do
  mv -- "$f" "${f%.*}".mp4
done

上面的代码在“glob”模式上运行一个 shell 循环,查找文件名中在某种扩展名之前带有“x264”的文件(以便稍后可以重命名扩展名);一旦它有了该文件列表,它就会调用mv进行重命名,并使用参数扩展来去除扩展名(句点后跟任何内容*),然后手动附加.mp4扩展名。

答案2

使用find

find -type f -name "*x264*" -execdir sh -c 'echo mv -n "$1" "${1%.*}.mp4"' _ {} \;

-n选项将防止mv覆盖现有文件,因为给定示例文件的名称重命名为单个文件名,在这种情况下,您将删除第一个文件。

要在没有扩展名(后缀)的文件上进行此工作:

find -type f -name "*x264*" -execdir sh -c 'file="${1#./}"; 
    echo mv -n "$file" "${file%.*}.mp4"' _ {}  \;

删除echo上面的内容以摆脱空运行并对文件执行重命名。

相关内容