You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中使用正则匹配查找指定子目录是否存在

问题原因

你写的脚本失效核心原因是引号会阻止Bash通配符展开,[ -d ]参数接收的是带字面量*的路径,自然无法匹配到包含随机字符串的实际目录。

解决方案

方案1:数组匹配(推荐,适配多匹配结果场景)

通过数组接收通配符展开的结果,判断数组长度即可确认目录是否存在:

#!/bin/bash
# 开启nullglob:匹配不到结果时数组为空,不会保留*字面量
shopt -s nullglob
snapshot_dirs=(/var/lib/messageFunction-*/data/snapshot)
# 恢复nullglob默认配置,避免影响后续脚本逻辑
shopt -u nullglob

if [[ ${#snapshot_dirs[@]} -gt 0 ]]; then
    echo "FOLDER IS THERE"
    # 如需使用实际路径,直接取${snapshot_dirs[0]}即可
else
    echo "NO FOLDER"
fi

方案2:find命令匹配

如果不想修改shell配置,也可以用find命令做路径匹配:

#!/bin/bash
# maxdepth设为3避免遍历过深,匹配到符合规则的目录就返回成功
if find /var/lib -maxdepth 3 -type d -path "*/messageFunction-*/data/snapshot" | grep -q .; then
    echo "FOLDER IS THERE"
else
    echo "NO FOLDER"
fi
注意事项

不要把带通配符的路径包裹在单/双引号内,否则通配符会被识别为普通字符,无法完成模糊匹配。


内容的提问来源于stack exchange,提问作者Jagadeesan G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:54:04