对文件夹中的所有文件执行相同的命令并输出到同一个文件

对文件夹中的所有文件执行相同的命令并输出到同一个文件

我是 Linux 新手,我想在文件上循环对文件夹中的所有文件执行相同的命令,该命令包括文件名:

ffmpeg -i REC_2019_08_31_11_52_30_F.MP4 REC_2019_08_31_11_52_30_F.ass  

我尝试过

for f in files do ''command'' done

但它不起作用。

答案1

循环转换当前目录下的for每个文件.MP4参数扩展文件扩展名的改变如下:

for i in *.MP4; do
  ffmpeg -i "$i" "${i/%MP4/ass}"
done

${i/%MP4/ass}扩展为当前处理的文件名,并将最后一次出现的“MP4”替换为“ass”。实现相同目的的另一种方法是从最后一个点开始剪切字符串并添加新的扩展名:${i%.*}.ass

在多次且可能持续的操作的情况下,我非常喜欢使用GNUparallel,通过并行运行作业可以大大提高速度。上面的循环parallel将简单地为:

parallel ffmpeg -i {} {.}.ass ::: *.MP4

相关内容