我的脚本没有给我任何输出
for file in ./*
do
if [ "$file" = *.mov ];
then
ffmpeg -i $file -an -f framemd5
fi
done
每当我运行它时,它都会立即返回提示。
最佳答案
因为你的测试:
if [ "$file" = *.mov ];
是假的。
例如,如果当前目录有以下文件:
file1.mov
file2
file3.txt
file4.mov
然后,$file
变量将在每次迭代中设置如下:
./file1.mov
./file2
./file3.txt
./file4.mov
但是测试的右侧仍将是“file1.mov file4.mov
”,因此每个测试是:
if [ "./file1.mov"= file1.mov file4.mov];
if [ "./file2"= file1.mov file4.mov];
if [ "./file3.txt"= file1.mov file4.mov];
if [ "./file4.mov"= file1.mov file4.mov];
...这两者都不是真的。
如果您想循环遍历当前目录中的所有 .mov 文件,请使用以下命令:
for file in ./*.mov; do
ffmpeg -i $file -an -f framemd5
done
顺便说一句,您应该随时准备好处理名称中包含空格和其他烦人字符的文件,因此这会更可靠:
for file in ./*.mov; do
ffmpeg -i "$file" -an -f framemd5
done
因为它会在文件名两边加引号。
关于bash - For循环不工作ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049227/