bash - For循环不工作ffmpeg

标签 bash loops

我的脚本没有给我任何输出

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 变量将在每次迭代中设置如下:

  1. ./file1.mov
  2. ./file2
  3. ./file3.txt
  4. ./file4.mov

但是测试的右侧仍将是“file1.mov file4.mov”,因此每个测试是:

  1. if [ "./file1.mov"= file1.mov file4.mov];
  2. if [ "./file2"= file1.mov file4.mov];
  3. if [ "./file3.txt"= file1.mov file4.mov];
  4. 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/

相关文章:

java - 使用 Java 中的空参数执行 shell 脚本

bash - 在 bash 命令 shell 中,解析一行中的数字

linux - awk + ​​过滤日志文件

git - 通过 git 跟踪工作时间

Python列表在特定条件下选择?

Javascript:按钮/点击计数器集成在功能中

bash - 提取值并读取为变量

c - 访问数组中的最后一项时索引超出范围

java - 带返回值的 Try/Catch 循环

r - 循环并使用向量的值执行操作