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

Azure DevOps Pipeline:多TGZ文件分对应子文件夹提取方法问询

解决方案:动态提取多个TGZ到对应子文件夹

由于无法预知应用名称,静态配置的ExtractFiles@1任务无法满足需求,必须通过脚本动态遍历并处理每个TGZ文件。以下提供PowerShell和Bash两种实现,适配不同的代理环境:

PowerShell 脚本(适用于Windows代理)

在流水线中添加PowerShell@2任务,使用以下脚本自动处理所有TGZ文件:

# 递归查找bundles目录下所有tgz文件
Get-ChildItem -Path "$(System.DefaultWorkingDirectory)/bundles" -Recurse -Filter "*.tgz" | ForEach-Object {
    # 从文件所在目录名获取应用标识
    $appName = $_.Directory.Name
    # 构建目标提取路径
    $targetDir = "$(System.DefaultWorkingDirectory)/bundle_extracts/$appName"
    # 确保目标目录存在(不存在则创建)
    New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
    # 执行解压操作
    tar -xzf $_.FullName -C $targetDir
}

脚本说明

  1. Get-ChildItem递归遍历bundles下所有.tgz文件
  2. 通过$_.Directory.Name获取每个TGZ所在的子文件夹名称(即应用名)
  3. 在bundle_extracts下创建对应应用的子文件夹
  4. 使用tar命令将TGZ解压到指定的目标文件夹

Bash 脚本(适用于Linux/macOS代理)

如果流水线使用Linux或macOS代理,添加Bash@3任务,使用以下脚本:

# 查找所有bundles目录下的tgz文件
find "$(System.DefaultWorkingDirectory)/bundles" -type f -name "*.tgz" | while read -r tgzPath; do
    # 获取应用名称(TGZ所在的子文件夹名)
    appName=$(basename "$(dirname "$tgzPath")")
    # 构建目标路径
    targetDir="$(System.DefaultWorkingDirectory)/bundle_extracts/$appName"
    # 创建目标目录(自动处理层级)
    mkdir -p "$targetDir"
    # 解压TGZ到目标目录
    tar -xzf "$tgzPath" -C "$targetDir"
done

注意事项

  • Azure托管代理默认已预装tar命令,自托管代理需确保tar已安装并加入环境变量
  • 脚本会自动处理所有符合条件的TGZ文件,无需提前指定应用名称
  • 解压后的文件会严格对应到bundle_extracts/<应用名>目录下,避免文件冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:52:50