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

Jon*_*Jon 2 bash

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

  • 视频1.swf
  • video2.swf

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

ffmpeg -i *.swf -vcodec mpeg4 *.mp4
Run Code Online (Sandbox Code Playgroud)

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

anu*_*ava 5

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

s='video1.swf'
f="${s/.swf/.mp4}"
echo "$f"
video1.mp4
Run Code Online (Sandbox Code Playgroud)

使用ffmpeg

for f in *.swf; do
    ffmpeg -i "$f" -vcodec mpeg4 "${f%.swf}.mp4"
done
Run Code Online (Sandbox Code Playgroud)

  • 使用 `"${f%.swf}.mp4"` 可能会更好,因为它避免了名称中间的替换。 (2认同)