如何从Nexus仓库下载目录并保留原文件夹结构?
保留层级下载Nexus仓库目录的解决方案
方法1:使用wget递归下载(最简单)
直接用wget的递归下载功能,自动保留目录结构,适合不需要复杂逻辑的场景:
# 替换为你的Nexus地址、仓库名、目标路径及认证信息 wget --recursive --no-parent --user=你的用户名 --password=你的密码 http://你的nexus地址/repository/你的仓库名/目标目录路径/
参数说明:
--recursive:递归下载所有子目录及文件--no-parent:避免下载目标目录的父级内容--user/--password:Nexus的认证信息(如果仓库需要权限)
如果希望本地只保留目标目录以下的层级,而非从repository开始的完整路径,可以添加--cut-dirs=N参数,N是需要跳过的路径段数。比如目标URL是http://nexus.example.com/repository/my-repo/app/v1/,要跳过repository/my-repo这2段,就加--cut-dirs=2,本地会直接生成app/v1/的结构。
方法2:改进bash脚本(基于Nexus API)
如果必须用API,修改脚本逻辑,先解析文件路径再创建本地目录后下载:
#!/bin/bash # 配置参数 NEXUS_URL="http://你的nexus地址" REPO_NAME="你的仓库名" TARGET_DIR="目标目录路径(比如/app/v1)" USER="你的用户名" PASSWORD="你的密码或认证token" # 获取目标目录下所有文件的完整路径(依赖jq工具解析JSON) curl -u "$USER:$PASSWORD" "$NEXUS_URL/service/rest/v1/assets?repository=$REPO_NAME&path=$TARGET_DIR" | jq -r '.items[].path' | while read FILE_PATH; do # 创建本地对应目录 LOCAL_FOLDER=$(dirname "$FILE_PATH") mkdir -p "$LOCAL_FOLDER" # 下载文件到对应目录 curl -u "$USER:$PASSWORD" -o "$FILE_PATH" "$NEXUS_URL/repository/$REPO_NAME/$FILE_PATH" done
注意:需要先安装jq工具(比如apt install jq或brew install jq),如果你的Nexus用的是v2 API,替换API地址为$NEXUS_URL/service/local/repositories/$REPO_NAME/content$TARGET_DIR?depth=-1&recursive=true,并调整解析逻辑(v2返回XML,可改用xmllint解析)。
方法3:使用Nexus CLI工具
如果可以安装Nexus官方CLI工具,操作更简洁:
# 先安装nexus-cli(根据系统选择安装方式,比如pip install nexus-cli) nexus-cli assets download --repository 你的仓库名 --path 目标目录路径 --local-dir ./本地保存根目录 --recursive
该工具会自动识别远程目录结构,在本地对应路径下保存文件。
内容的提问来源于stack exchange,提问作者Barvazi Momo
相关产品推荐
相关产品推荐

