Bash 改变输出文件名的循环

Bash Loop that changes output file name

我有一个 bash 别名,可以将 .mov 转换为 .gif 我有一个.mov文件夹,我想对文件夹中的每个文件执行别名 我有一个有效的循环,它 运行 遍历并转换文件夹中的每个文件,但它(提示我)覆盖每个文件名。


alias video_to_gif='function video_to_gif(){ ffmpeg -i  output.gif && gifsicle -O3 output.gif -o output.gif && say "Video is ready!"};video_to_gif'


for file in *.mov
do
video_to_gif $file
done

我需要在循环中添加一条指令,以更改它转换的每个文件的文件名(更改为任何内容,只要它们对于每个文件都不同)

目前如果文件夹中有n个文件,它会运行遍历并转换每个文件,但文件夹最后会有n+1个文件,转换后的文件是最后一个原始文件的转换

只需将每个输入文件的扩展名从 .mov 更改为 .gif 就足够了。

顺便说一句:您不需要别名,尤其是因为您已经编写了一个函数:

video_to_gif() {
    out="${1%.*}.gif"
    ffmpeg -i "" "$out" &&
    gifsicle -O3 "$out" -o "$out"
    && say "Video is ready!"
}
for file in *.mov; do
    video_to_gif "$file"
done