gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:04:50 25 4
gpt4 key购买 nike

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

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

我也尝试过不加双引号。

最佳答案

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

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

即使在包含数百万个文件的目录中,这也会非常快速地工作,并且不涉及新的子 shell。

Source

<小时/>

最简单的应该是依赖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 输出以使其完全静音。

<小时/>

下面是一个同样依赖 glob 扩展的优化,但避免使用 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

这与 grok12's answer 非常相似,但它避免了整个列表中不必要的迭代。

关于shell - 检查 shell 脚本中是否存在带有通配符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com