能否使用curl或wget批量下载Nexus Sonatype OSS仓库整个文件夹
可以通过wget或者curl结合Nexus自带的API实现批量下载整个仓库文件夹,两种常用可落地的方案如下:
方案1:使用wget递归下载(适合开启了目录浏览权限的仓库)
该方案操作最简单,Nexus默认的raw类型仓库均开启了目录浏览权限,其他类型仓库未关闭该权限的前提下均可使用:
wget -r -np -nH --cut-dirs=2 --user=你的账号 --password=你的密码 http://IP:8081/repository/目标仓库名/要下载的文件夹路径/
参数说明:
-r:开启递归下载-np:不追溯父目录,避免下载目标文件夹以外的内容-nH:不生成以IP/域名为名的根目录--cut-dirs=2:去掉路径前2层的repository/仓库名前缀,避免下载的文件嵌套多层无用目录,可根据你的实际路径层级调整数值
方案2:curl结合Nexus REST API下载(更稳定,无目录浏览权限要求)
如果仓库关闭了目录浏览权限,可直接调用Nexus自带的官方API拉取文件列表后批量下载,适合生产环境使用:
- 第一步导出指定路径下的所有文件下载链接到本地文件
curl -u 你的账号:你的密码 "http://IP:8081/service/rest/v1/search/assets?repository=目标仓库名&parent=要下载的文件夹路径" | grep -o '"downloadUrl" : "[^"]*' | sed 's/"downloadUrl" : "//' > filelist.txt
如果要下载整个仓库根目录的所有内容,把parent=后面的内容留空即可。
2. 第二步批量下载列表内的所有文件
cat filelist.txt | xargs -n 1 curl -u 你的账号:你的密码 -O
如需每周自动更新,可将上述命令封装为脚本,配置定时任务执行即可,执行前可先清空本地旧目录实现全量同步。
通用注意事项
- 密码含特殊字符时不要直接明文写在命令里,可去掉命令里的密码部分,只保留
--user 你的账号参数,执行时会交互式提示输入密码,避免密码泄露 - 如果是maven、npm等格式的仓库,建议使用对应生态的官方客户端做整库同步,效率比直接下载二进制文件更高
内容的提问来源于stack exchange,提问作者zoroloz
相关产品推荐
相关产品推荐

