J'essaie de searchr tous les files .mkv
dans mon dossier actuel, puis en utilisant mediainfo
je veux mettre la height
de ses métadonnées à une variable, mais il semble qu'il échoue.
Cet extrait:
height=$(mediainfo "input.mkv" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
fonctionne très bien, il produit le résultat que je veux si j'insère manuellement le nom du file:
# height=$(mediainfo 'input.mkv' | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; Height : 720 pixels 720
Mais, lorsque j'essaie de le mettre dans mon for file in
pour que je n'ai pas besoin d'insert manuellement le nom de file, il continue à échouer:
for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
La sortie de la variable $height
est vide.
# for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done (null) (null)
J'ai déjà essayé, en changeant "$file"
en '$file'
et $file
, mais aucun d'eux ne fonctionne, est-ce que je manque quelque chose?
Vous avez écrit *.{mkv}
au lieu de *.mkv
. Par conséquent, la boucle ne boucle qu'environ le seul "file" *.{mkv}
qui n'existe pas. Dans ce cas, la sortie de mediainfo
est simplement vide.
Ajoutez quelque chose comme echo "$file"
dans votre boucle pour vérifier.
Supprimez le '{}' de la partie 'pour le file'. Il devrait être comme ceci à la place:
for file in *.mkv; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
Dans votre code, le "*. {Mkv}" s'étend à tous les files se terminant par '. {Mkv}' dont je suppose qu'il n'y en a pas, donc la list dans l'instruction for revient vide.