从字符串中删除文件扩展名的最佳方法?

从字符串中删除文件扩展名的最佳方法?

因此,我正在使用我编写的脚本将视频转换为 webm 格式。某个程序调用脚本,发送%f视频的完整、绝对文件名,如下所示:

converter.sh %f

其中%f有两个可能的扩展名,.avi或者.mpg.

# /bin/bash
ffmpeg -i $1 `dirname $1``basename $1 avi`webm && rm $1

目前,它在$1包含.avi文件时可以完美运行,因为basename删除了.avi扩展名。当以相反$1结尾时.mpg,结果是.mpgwebm

我如何修改该脚本才能接收这两种可能的不同格式?


恢复:如果$1/somedir/video.avi,脚本应该执行以下操作:

ffmpeg -i /somedir/video.avi /somedir/video.webm

如果$1/somedir/video.mpg,脚本应该这样做:

ffmpeg -i /somedir/video.mpg /somedir/video.webm

我知道这对某些人来说可能很愚蠢,但我对 bash 还很陌生。

答案1

您可以使用大多数 shell 提供的替换机制:

B=$(basename "$1"); D=$(dirname "$1");
ffmpeg -i "$1" "$D/${B%.*}.webm" && rm "$1"

事实上,basenamedirname可以通过替换来模仿。

注意:直接.*删除后缀在this.dir/file.

相关内容