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

GitHub Actions中find命令使用通配符失效问题

解决GitHub Actions中/**/*.xml通配符导致find命令报错的问题

问题根源

GitHub Actions默认使用的bash环境未启用globstar选项——这个选项负责让**递归匹配所有子目录下的文件。默认关闭状态下,**只会匹配当前目录的文件,导致你传入的test-results/unit-test-results-ui/**/*.xml无法展开成实际的嵌套目录文件路径,最终触发"No such file or directory"错误。

解决方案

方案1:在工作流步骤中临时启用globstar

直接在执行脚本的步骤里开启globstar,让bash正确展开递归通配符:

- name: Upload UI unit test results to DoT
  run: |
    shopt -s globstar
    ./scripts/dot-upload.sh test-results/unit-test-results-ui/**/*.xml
  shell: bash

方案2:修改dot-upload.sh脚本自身处理递归查找

如果不想改动工作流结构,可以在脚本内部处理路径逻辑,用find命令主动递归查找xml文件:

# 在dot-upload.sh开头添加逻辑
if [ $# -eq 0 ]; then
  echo "请传入文件路径或目录"
  exit 1
fi

# 处理传入的路径:如果是目录,递归找所有xml;否则直接使用传入的文件
if [ -d "$1" ]; then
  TARGET_FILES=$(find "$1" -type f -name "*.xml")
else
  # 尝试展开通配符(如果脚本运行环境支持的话)
  shopt -s globstar nullglob
  TARGET_FILES=("$1")
fi

# 后续使用TARGET_FILES变量进行处理

方案3:在工作流中用find生成文件列表后传给脚本

绕开通配符问题,直接用find命令找到所有目标文件,再传递给脚本:

- name: Upload UI unit test results to DoT
  run: |
    # 找到所有xml文件,用数组存储避免空格问题
    mapfile -t FILES < <(find test-results/unit-test-results-ui -type f -name "*.xml")
    ./scripts/dot-upload.sh "${FILES[@]}"
  shell: bash

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:42:16