您需要将音轨从 mp4 提取到 mp3。一般来说,这有效
find . -name "*.mp4" -exec ffmpeg -i {} -b:a 192K -vn {}.mp4 \;
但我想清除(删除)mp4 扩展名,否则,我当然会得到.mp4.mp3
以不同的方式做到了
find . -name "*.mp4" -exec echo {}#.mp4 \;
find . -name "*.mp4" -exec echo {{}#.mp4} \;
find . -name "*.mp4" -exec echo ${{}#.mp4} \;
当然,为了测试,我替换了命令以查看如何清除扩展名,但没有成功。我的错误在哪里?
例如像这样:
注意sh程序的第二个参数是一个单引号字符串。这样您运行命令的 shell 实例就不会尝试处理并发生在该
$1
行上${1%.mp4}
。如果您仍然需要用双引号引起来,那么该字符$
将需要“转义”:\$
。一般来说,思路是正确的——使用参数扩展。但:
顾名思义(“参数扩展”),构造中必须存在参数(在 posix 标准的术语中,这是变量名、参数编号或特殊字符)。
${xyz%строка}
- 你可以(变量的值将被处理xyz
)${1%строка}
- 你可以(第一个参数将被处理)${./файл.mp4%строка}
- 这是不可能的(我希望很清楚这条线来自哪里- find./файл.mp4
程序将替换它而不是{}
${параметр#строка}
- 删除前缀,你需要一个后缀:${параметр%строка}