目前,我正在尝试在我的linux服务器(Ubuntu 16.04)上运行命令来重新编码所有.mp4文件。但是我在文件夹和子文件夹中有很多文件,而且我将浪费大量时间手动运行这些命令
这是我的脚本:
for D in ./*; do
if [ -d "$D" ]; then
cd "$D"
for i in *.mp4; do
ffmpeg -i "$i" -codec copy -acodec copy -shortest -map 0:v -map 0:m:language:eng "${i%.*}.mp4"
done
cd ..
fi
done
但是,我收到了这个错误:
Error: ENOENT: no such file or directory, stat '*.mp4'
我怎么解决这个问题?
谢谢。
分析解答
使用find
。它为您处理sub-directory recursion。像这样:
find . -type f -name "*.mp4" -exec ffmpeg -i {} -codec copy -acodec copy -shortest -map 0:v -map 0:m:language:eng {} \; -print
find
将自动处理当前目录和所有sub-directories-type f
:仅搜索文件- `-name "*.mp4":只有mp4扩展名的文件
-exec COMMAND {} \;
:对所有找到的文件执行该命令。{}
将替换为每个文件的文件名。\;
结束命令。-print
:将打印处理的文件
就您的代码而言,目录可能没有任何"*.mp4"文件,因此当您点击这样的目录时会出现no such file or directory, stat '*.mp4'
错误。