bash - "for i in *.mp4" 파일이 없으면 "*.mp4"를 인쇄하지 않는 방법은 무엇입니까? [복사]

bash - "for i in *.mp4" 파일이 없으면 "*.mp4"를 인쇄하지 않는 방법은 무엇입니까? [복사]

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 해당 단어가 제거됩니다.

관련 정보