変数に有効なビデオファイル拡張子(.mp4
)があるかどうかをテストするには?
答え1
たとえば、シェルパターン比較を使用します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
私の答えにはより多くの情報が含まれるかなり関連する質問です。