如何使bash代码对文件夹和子文件夹中的所有文件起作用?

时间:2019-06-05 09:00:05

标签: linux bash shell sh

我有一个代码,使用ffmpeg*.avi转换为*.mp4到文件夹中的所有文件。我希望它可以在所有文件夹和子文件夹上运行;并将结果保存在此子文件夹中。

我已经尝试过查找但没有成功

#!/bin/bash

for i in *.avi; 
do
    ffmpeg -i /location/"$i" -c:v libx264 -preset ultrafast \
       -strict -2 -n /location/"$(basename  "$i" .avi)".mp4
done

1 个答案:

答案 0 :(得分:1)

您可以使用find在所有子目录中找到匹配的文件:

find <top-dir> -iname "*.avi" | while read filename; do ffmpeg -i "$filename" ... "${filename%avi}mp4"; done

用您的...选项替换ffmpeg

您还可以使用GNU parallel实用程序来并行处理多个CPU上找到的文件的处理:

find <top-dir> -iname "*.avi" | parallel -i -- ffmpeg -i "{}" ... "{.}.mp4"