我的脚本不给我任何输出For循环不工作的ffmpeg
for file in ./*
do
if [ "$file" = *.mov ];
then
ffmpeg -i $file -an -f framemd5
fi
done
每当我运行它,它只是马上给我回我的提示。
我的脚本不给我任何输出For循环不工作的ffmpeg
for file in ./*
do
if [ "$file" = *.mov ];
then
ffmpeg -i $file -an -f framemd5
fi
done
每当我运行它,它只是马上给我回我的提示。
因为你的测试:
if [ "$file" = *.mov ];
是假的。
如果,exampe,当前目录具有这些文件:
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];
......这两者都不是真的。
如果你想通过在当前目录中的所有传送文件循环,用这个来代替:
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 file in ./*
do
if [[ "$file" = *.mov ]];
then
ffmpeg -i "$file" -an -f framemd5
fi
done
然而,这是简单的只是.mov
文件匹配在第一图案如图dovetalk。
谢谢,chepner,以及。 – Bleakley
谢谢你,dovetalk。一个非常有用的答案。 – Bleakley
如果我希望脚本不从当前目录中读取,而是从我放置在CLI中的任何目录中读取,那么我该怎么做? – Bleakley
我不确定你的意思是“在CLI中”,但是如果你想让它成为脚本的第一个参数,你只需要将'./*。mov'改为'“$ 1”/ *。mov' – dovetalk