我有一个将 *.mkv 文件转换为 *.avi 文件的 bash 脚本。这是它的样子:
#!/bin/bash
for f in $(ls *mkv | sed ‘s/\(.*\)\..*/\1/’)
do
ffmpeg -i $f.mkv -sameq $f.avi
done
然而,我需要这个脚本做的是,它需要在所有文件夹中递归搜索 *.mkv 文件,然后运行 ffmpeg 命令并将输出保存到同一目录。
请有人可以帮助我吗?:-)
find /some/path -name '*.mkv' | while read f
do
ffmpeg -i "$f" -sameq "${f:0:-4}.avi"
done
试试这样:
find <file_path> -name '*.mkv' -exec sh -c 'mv "$0" "${0%%.mkv}.avi"' {} \;
#!/bin/bash
find . -name "*.mkv" -exec ffmpeg -i {} -sameq `basename {} .mkv`.avi \;
感谢@Raul,这对我有用,并且是我想做的解决方案,它通过目录递归运行并在 mkv 文件上运行 ffmpeg 命令:
#!/bin/bash
find <file_path> -name '*.mkv' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mkv}.avi"' {} \;
exit;
而不是ls *.mkv
使用find . -name "*.mkv"
.
这假定没有有趣的文件名(没有空格、换行符)。另一种可能性是find
与 结合使用xargs
。xargs 手册提供了指导性的阅读,这将有一天可以挽救您的脚本生命:-)