変数に有効なビデオファイル拡張子があるかどうかをテストします。

変数に有効なビデオファイル拡張子があるかどうかをテストします。

変数に有効なビデオファイル拡張子(.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標準ではありません。ローカルコンピュータでテストする必要があります。また、filemacOSのコマンド-I-i

file私の答えにはより多くの情報が含まれるかなり関連する質問です。

関連情報