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

自托管GitHub Action Runner执行Zip命令无法匹配**/dist文件

解决GitHub Action/Yarn脚本中**通配符匹配失败的问题

问题场景

编译完成后尝试用**/dist通配符归档文件:

  • 在自托管GitHub Action Runner的_work目录下,直接通过shell执行ls -la **/dist能列出200多个文件,手动执行zip命令也正常
  • 但在GitHub Action中执行zip命令时报错:
zip error: Nothing to do! (try: zip -qq -r archive.zip . -i **/dist)
  • 在package.json中添加脚本"archive": "pwd && ls -la **/dist && zip -r **/dist",执行yarn archive时复现同样问题:
yarn run v1.22.19
$ pwd && ls -la **/dist && zip -r **/dist
/home/mathieu_auclair/actions-runner/_work/server/server
ls: cannot access '**/dist': No such file or directory
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

原因分析

**递归通配符属于bash的扩展glob特性(extglob),而:

  • GitHub Action默认使用sh作为执行shell,sh默认不支持**递归匹配
  • Yarn/npm执行脚本时,默认也是用sh而非bash,同样不支持该通配符

解决方案

1. 在GitHub Action中指定使用bash

在Action步骤里添加shell: bash,让命令在bash环境下执行,自动支持**通配符:

- name: Archive dist files
  shell: bash
  run: zip -qq -r archive.zip . -i **/dist

2. 修改Yarn脚本,显式用bash执行

在package.json的脚本中,用bash -c包裹命令,强制开启bash的扩展glob:

"scripts": {
  "archive": "bash -c 'pwd && ls -la **/dist && zip -r archive.zip **/dist'"
}

3. 改用find命令替代通配符

如果不想依赖shell特性,可以用find命令定位所有dist目录,再传给zip:

find . -type d -name "dist" -exec zip -r archive.zip {} +

这条命令兼容性更强,可直接在Action或Yarn脚本中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:45:24