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

通过设置 shell 的nullglob选项:shopt -s nullglob.从man bash

nullglob如果未找到匹配的文件名,并且未启用shell 选项,则该单词将保持不变。如果 nullglob 设置了该选项,但未找到匹配项,则该单词将被删除。

相关内容