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

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

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

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

我也尝试过没有双引号。


慕的地6264312
浏览 4278回答 3
3回答

千万里不及你

如果您的shell具有nullglob选项并且已打开,则将完全从命令行中删除不匹配任何文件的通配符模式。这将使ls看不到路径名参数,列出当前目录的内容并成功,这是错误的。GNU stat,如果没有参数或命名不存在的文件的参数,总是会失败,会更强大。此外,&>重定向运算符是一种基础。if stat --printf='' /path/to/your/files* 2>/dev/nullthen     echo foundelse     echo not foundfi更好的是GNU find,它可以在内部处理通配符搜索并在它找到一个匹配文件时立即退出,而不是浪费时间处理由shell扩展的潜在巨大的列表; 这也避免了shell可能溢出其命令行缓冲区的风险。if test -n "$(find /dir/to/search -maxdepth 1 -name 'files*' -print -quit)"then     echo foundelse     echo not foundfi非GNU版本的发现可能没有-maxdepth这里用来做选择查找搜索只/ /目录为/搜索,而不是扎根在那里的整个目录树。
打开App,查看更多内容
随时随地看视频慕课网APP