繁体   English   中英

如何在Linux Shell脚本中更改文件扩展名?

[英]How to change file extension in Linux shell script?

我已经找到了在类似情况下执行此操作的一些示例,但这是我编写的唯一的脚本,除了逐字逐行运行命令外,它还可以执行其他任何操作,因此我正在努力将这些示例应用于自己的情况,并且需要一些手工操作保持<3

我只是想从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 )指出:

$ {parameter%word} $ {parameter %% word}

删除匹配的后缀模式。 单词被扩展以产生一个模式,就像路径名扩展一样。 如果该模式与参数的扩展值的尾部部分匹配,则扩展的结果是具有最短匹配模式( %'' case) or the longest matching pattern (the %%''情况的参数的扩展值)已删除。 如果parameter为@或*,则将模式去除操作依次应用于每个位置参数,并且扩展为结果列表。 如果parameter是用@或*下标的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展为结果列表。

这只是可以对shell变量执行的许多字符串操作之一。 它们都以Parameter Expansion的名称命名。

这也是bash手册中给出的部分标签。 因此, man bash / paramter exp应该可以带您快速到达那里。 `

以下命令更改当前目录下所有文件的文件扩展名。

find . -depth -name "*.c" -exec sh -c 'dname=$(dirname {}) && fname=$(basename {} .c) && mv {} $dname/$fname.h' ";"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM