当我得到一个名称包含字符串“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
上面的内容以摆脱空运行并对文件执行重命名。