bash - "for i in *.mp4"ファイルがない場合は "*.mp4"を印刷しない方法は? [コピー]

bash -

MediaInfoを使用してメディアファイルの解像度を印刷するスクリプトを作成しています。正確なクリッピングをテストして取得するために、Marvelディレクトリをハードコーディングしました。

パスワード:

#!/bin/bash

for i in /mnt/D/tv/"Marvel (MCU)"/{*.mp4,*.mkv,*.avi,*.m4v}; do 
    mediainfo "$i" > temp
    H=`cat temp | grep "Height" | cut -d ":" -f 2 | cut -c 2- | cut -d "p" -f 1`
    W=`cat temp | grep "Width" | cut -d ":" -f 2 | cut -c 2- | cut -d "p" -f 1`
    printf "%-50s %s x %s \n" "$(basename "$i")" "$W" "$H"
    rm temp
done

出力:

1. Iron Man.mp4                                    1 920  x 800  
10. Guardians of the Galaxy.mp4                    1 280  x 536  
... 
8. Thor The Dark World.mkv                         1 920  x 800  
9. Captain America The Winter Soldier.mkv          1 280  x 534  
*.avi                                               x  
*.m4v                                               x  

フォルダには.mp4、.mkvファイルしかないため、「*.avi」、「*.m4v」が印刷されます。見つからない拡張子の印刷を抑制する方法は?

ベストアンサー1

nullglobシェルオプションの設定: shopt -s nullglob.from man bash:

nullglob一致するファイル名がなく、有効なシェルオプションがない場合、単語は変更されずに残ります。このオプションが設定されていて一致するものがない場合、その nullglob 単語は削除されます。

おすすめ記事