如何重用通配符找到的模式?

时间:2014-10-07 12:49:50

标签: bash

我想将所有.swf个文件转换为某个目录中的mp4个文件。我使用*通配符来识别文件夹中以.swf结尾的所有文件 - > *.swf。 所以,假设我有几个视频:

  • video1.swf
  • video2.swf

我想在新命名中重复使用找到的名称,在我的bash示例中使用video1.mp4video2.mp4

ffmpeg -i *.swf -vcodec mpeg4 *.mp4

如何重用通配符找到的模式?

3 个答案:

答案 0 :(得分:4)

您可以使用BASH字符串替换:

s='video1.swf'
f="${s/.swf/.mp4}"
echo "$f"
video1.mp4

使用ffmpeg

for f in *.swf; do
    ffmpeg -i "$f" -vcodec mpeg4 "${f%.swf}.mp4"
done

答案 1 :(得分:4)

您可以对模式中的每个文件名使用循环,并替换文件扩展名:

for f in *.swf ; do ffmpeg -i "$f" -vcodec mpeg4  "$(basename "$f" .swf).mp4" ; done

答案 2 :(得分:3)

您可以使用文件名填充数组:

files=(*.swf)

然后,对整个数组进行替换以获取新名称:

ffmpeg -i "${files[@]}" -vcodec mpeg4 "${files[@]/%.swf/.mp4}"