.mkv
現在のフォルダ内のすべてのファイルを検索し、mediainfo
I want toを使用してheight
そのメタデータを変数に入れようとすると失敗するようです。
このスニペット:
height=$(mediainfo "input.mkv" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
素晴らしい作品。ファイル名を手動で挿入すると、目的の結果が出力されます。
# height=$(mediainfo 'input.mkv' | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
Height : 720 pixels
720
for file in
ただし、ファイル名を手動で挿入する必要がないように、それを自分のディレクトリに入れようとすると失敗し続けます。
for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
変数の出力は$height
空です。
# for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
(null)
(null)
"$file"
に'$file'
変更してみましたが、$file
何も機能しません。何か抜けたものはありますか?
答え1
あなたが書いたもの*.{mkv}
ではありません*.mkv
。したがって、ループは*.{mkv}
存在しない「ファイル」に対してのみ繰り返されます。この場合、出力はmediainfo
空です。
echo "$file"
確認するには、ループにこのようなものを追加します。
答え2
「for file」セクションから「{}」を削除します。次のようにする必要があります。
for file in *.mkv; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
コードでは、「*.{mkv}」は「.{mkv}」で終わるすべてのファイルに展開されます。ファイルがないようで、for ステートメントのリストが空です。