0

我有一个将 *.mkv 文件转换为 *.avi 文件的 bash 脚本。这是它的样子:

#!/bin/bash
for f in $(ls *mkv | sed ‘s/\(.*\)\..*/\1/’)
do
ffmpeg -i $f.mkv -sameq $f.avi
done

然而,我需要这个脚本做的是,它需要在所有文件夹中递归搜索 *.mkv 文件,然后运行 ​​ffmpeg 命令并将输出保存到同一目录。

请有人可以帮助我吗?:-)

4

5 回答 5

4
find /some/path -name '*.mkv' | while read f
do
    ffmpeg -i "$f" -sameq "${f:0:-4}.avi"
done
于 2012-05-26T20:24:18.573 回答
2

试试这样:

find <file_path> -name '*.mkv' -exec sh -c 'mv "$0" "${0%%.mkv}.avi"' {} \;
于 2012-05-26T20:19:22.850 回答
1
#!/bin/bash
find . -name "*.mkv" -exec ffmpeg -i {} -sameq `basename {} .mkv`.avi \;
于 2012-05-26T20:36:38.267 回答
1

感谢@Raul,这对我有用,并且是我想做的解决方案,它通过目录递归运行并在 mkv 文件上运行 ffmpeg 命令:

#!/bin/bash
find <file_path> -name '*.mkv' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mkv}.avi"' {} \;
exit;
于 2012-05-27T15:47:15.963 回答
0

而不是ls *.mkv使用find . -name "*.mkv".

这假定没有有趣的文件名(没有空格、换行符)。另一种可能性是find与 结合使用xargs。xargs 手册提供了指导性的阅读,这将有一天可以挽救您的脚本生命:-)

于 2012-05-26T20:22:13.770 回答