小编典典

检查shell脚本中是否存在带有通配符的文件

all

我正在尝试检查文件是否存在,但使用通配符。这是我的例子:

if [ -f "xorg-x11-fonts*" ]; then
    printf "BLAH"
fi

我也试过没有双引号。


阅读 72

收藏
2022-04-02

共1个答案

小编典典

对于 Bash 脚本,最直接和最高效的方法是:

if compgen -G "${PROJECT_DIR}/*.png" > /dev/null; then
    echo "pattern exists!"
fi

即使在具有数百万个文件的目录中,这也将非常快速地工作并且不涉及新的子外壳。


最简单的应该是依赖ls返回值(当文件不存在时它返回非零):

if ls /path/to/your/files* 1> /dev/null 2>&1; then
    echo "files do exist"
else
    echo "files do not exist"
fi

我重定向了ls输出以使其完全静音。


这是一个也依赖全局扩展的优化,但避免使用ls

for f in /path/to/your/files*; do

    ## Check if the glob gets expanded to existing files.
    ## If not, f here will be exactly the pattern above
    ## and the exists test will evaluate to false.
    [ -e "$f" ] && echo "files do exist" || echo "files do not exist"

    ## This is all we needed to know, so we can break after the first iteration
    break
done
2022-04-02