我的脚本没有给我任何输出
for file in ./*
do
if [ "$file" = *.mov ];
then
ffmpeg -i $file -an -f framemd5
fi
done
每当我运行它时,它会立即给我提示。
答案 0 :(得分:2)
因为你的考试:
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
因为它会在文件名周围加上引号。
答案 1 :(得分:2)
假设您使用bash
,则需要使用[[
命令进行模式匹配。
for file in ./*
do
if [[ "$file" = *.mov ]];
then
ffmpeg -i "$file" -an -f framemd5
fi
done
但是,如dovetalk所示,仅匹配第一个模式中的.mov
文件更为简单。