我发现了一些在类似情况下执行此操作的示例,但这是我编写的唯一除了逐字运行命令之外执行任何操作的 shell 脚本,因此我正在努力将这些示例应用到我自己的情况中,并且需要一些手工操作持有
我只是想从 MP4 中批量抓取音频。该脚本的工作原理:
for f in *.mp4;
ffmpeg -i "$f" -f mp3 -ab 192000 -vn "mp3s/$f.mp3"
done
但这些文件都以 .mp4.mp3 结尾。如何去掉 mp4 部分?
如果您使用的是 bash
${f%%.mp4}
将给出不带.mp4
扩大。
尝试像这样使用它:
for f in *.mp4; do
ffmpeg -i "$f" -f mp3 -ab 192000 -vn "mp3s/${f%%.mp4}.mp3"
done
...并且不要忘记do
关键字如给出的示例中所示。
解释
bash 手册(man bash
) 状态:
${参数%word} ${参数%%word}
删除匹配的后缀模式。
这个词被扩展为产生
就像路径名扩展中的模式一样。如果模式匹配
参数扩展值的尾部,然后
扩展的结果是参数的扩展值
最短匹配模式(%'' case) or the longest
matching pattern (the
%%'' 案例)已删除。如果参数是@
或*,模式去除操作依次应用于每个位置参数,扩展是结果
列表。如果参数是一个数组变量,下标为@或
*,模式移除操作应用于每个成员
依次排列数组,扩展就是结果列表。
这只是您可以对 shell 变量执行的众多字符串操作之一。他们的名字都是参数扩展.
That's as well the section label given in the bash manual. Thus man bash
/paramter exp should bring you there fast.
`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)