测试变量是否具有有效的视频文件扩展名

测试变量是否具有有效的视频文件扩展名

如何测试变量是否具有有效的视频文件扩展名 ( .mp4)?

答案1

在例如中使用 shell 模式比较bash

if [[ $variable == *.mp4 ]]; then
    printf 'String "%s" ends in ".mp4"\n' "$variable"
else
    printf 'String "%s" has some other suffix\n' "$variable"
fi

或者,使用标准case语句,如果您想比较许多后缀字符串,这可能会更漂亮,

case $variable in
    *.mp4)
        printf 'String "%s" ends in ".mp4"\n' "$variable"
        ;;
    *.mov)
        printf 'String "%s" ends in ".mov"\n' "$variable"
        ;;
    *.blarg|*.foo)
        printf 'String "%s" ends in ".blarg" or ".foo"\n' "$variable"
        ;;

    *)
        printf 'String "%s" has some other suffix\n' "$variable"
esac

如果您的变量包含路径名,并且您想要测试该路径名处的文件是否是视频格式的文件,那么(可能)最好要求命令file对文件内容进行分类。这是因为 Unix 系统上的文件是任意的,my video.mp4即使目录显然不是视频文件,也可能会被调用。

您可以使用以下方法获取文件的 MIME 类型file -i(在这里,我还使用file-b“简短”输出选项,不带文件名):

$ file -b -i 'video/the_amazing_spiderman_trailer.mp4'
video/mp4; charset=binary

这可以在脚本中使用:

if file -b -i "$variable" | grep -q -F 'video/mp4;'
then
    printf '"%s" is most likely an MP4 video\n' "$variable"
fi

在上面的代码中,后缀字符串包含什么并不重要$variable

请注意,我正在 FreeBSD 系统上对此进行测试,并且 的输出file不是标准的。您需要在本地机器上进行测试。另请注意,filemacOS 上的命令-I使用-i.

file一个有点相关的问题,在我的回答中提供了更多信息:

相关内容