如何在管道命令中多次使用当前文件名?

如何在管道命令中多次使用当前文件名?

我正在尝试将一批 .mov 文件转换为 mp4。如何从管道获取文件名以生成 ffmpeg 命令?如何在链接中多次使用管道参数?我试图得到类似的东西:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"

答案1

当你想使用标准输出一个命令作为标准输入另一个命令。但您需要将文件作为输入传递给ffmpeg,而不是其标准输入上的文件名。并且您需要ffmpeg多次运行,每个输入文件运行一次以获取输出文件。

长话短说,管道对此没有用,您需要一个循环,正如其他答案所建议的那样。但应该用双引号括住文件名参数:

for file in *.MOV; do
    ffmpeg -y -i "$file" "$file.mp4"
done

您在评论中提到您可以编写 Perl 脚本。那确实有点过头了。Bash 是一种更简单、更合适的方法。请注意,您可以在一行中编写上述脚本,然后直接在命令行上运行它。

for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done

答案2

for你可以用一个简单的循环来实现

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done

相关内容