您需要将音轨从 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程序将替换它而不是{}${параметр#строка}- 删除前缀,你需要一个后缀:${параметр%строка}