为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

检查shell脚本中是否存在带通配符的文件我正在尝试检查文件是否存在,但是使用通配符。这是我的例子:if [ -f "xorg-x11-fonts*" ]; then     printf "BLAH"fi我也尝试过没有双引号。
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

如果您的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这里用来做选择查找搜索只/ /目录为/搜索,而不是扎根在那里的整个目录树。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 4270 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信