如何测试变量是否具有有效的视频文件扩展名 ( .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
不是标准的。您需要在本地机器上进行测试。另请注意,file
macOS 上的命令-I
使用-i
.
file
一个有点相关的问题,在我的回答中提供了更多信息: