当前位置:网站首页>Shell常用脚本:Nexus批量上传本地仓库增强版脚本(强烈推荐)
Shell常用脚本:Nexus批量上传本地仓库增强版脚本(强烈推荐)
2022-07-31 22:32:00 【嗯嗯**】
脚本内容
增加内容:
- 消息提示更加人性化
- 校验本地仓库是否存在
- 校验远程仓库是否网络连通
- 上传前有文件确认操作
- 显示待上传的文件总数,仓库无待上传的文件直接结束脚本
enhanceMavenImport.sh
#!/bin/bash
# author: LinRuChang
# date: 2022-07-27 04:15:00
# desc: nexus上传脚本
# use
# 第一种:sh enhanceMavenImport.sh -l 本地仓库目录绝对路径 -u nexus账号 -p nexus密码 -r 远程私库的URL地址
# sh enhanceMavenImport.sh绝对路径 -l /www/server/maven/repository2 -u admin -p admin123 -r http://192.168.19.107:8082/repository/lrc
#
# 第二种:将此脚本放入本地仓库目录里面,然后执行即可- 【切记本地仓库目录与脚本的路径关系的是父子关系,非孙子辈等关系】
# sh enhanceMavenImport.sh绝对路径 -u nexus账号 -p nexus密码 -r 远程私库的URL地址
if [[ $1 == 'help' || $1 == '--help' ]]; then
echo "用法: sh $(readlink -f $0) -l 本地仓库绝对路径 -u nexus账号 -p nexus密码 -r 远程仓库URL地址 "
exit 0
fi
while getopts ":l:r:u:p:" opt; do
case $opt in
l) LOCAL_REP_DIR="$OPTARG"
;;
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
# 如果不传-l本地仓库路径,则以当前脚本所在的目录的本地仓库路径
if [[ -z ${LOCAL_REP_DIR} ]]; then
#LOCAL_REP_DIR=$(pwd)
LOCAL_REP_DIR=$(readlink -f $0 | xargs dirname)
fi
echo "================入参============================="
LOCAL_REP_DIR=$( ( echo ${
LOCAL_REP_DIR} | grep '.*\(/\)$' &>/dev/null ) && echo ${LOCAL_REP_DIR} || echo ${LOCAL_REP_DIR}'/' )
echo "待上传的本地仓库地址:${LOCAL_REP_DIR}"
echo "Nexus账号:${USERNAME}"
echo "Nexus密码:${PASSWORD}"
REPO_URL=$( ( echo ${
REPO_URL} | grep '.*\(/\)$' &>/dev/null ) && echo ${REPO_URL} || echo ${REPO_URL}'/' )
echo "远程仓库URL地址:${REPO_URL}"
echo "============================================="
if [[ ${USERNAME} && ${PASSWORD} && ${REPO_URL} && -d ${LOCAL_REP_DIR} ]]; then
echo "入参非空校验通过!!!"
else
echo "错误:可能Nexus的账号u、密码p、远程仓库地址r信息有缺失,或者本地仓库目录l不存在,请检查"
echo "用法: sh $(readlink -f $0) -l 本地仓库绝对路径 -u nexus账号 -p nexus密码 -r 远程仓库URL地址 "
exit 1;
fi
echo -e "\n================检测远程目录地址网络连通性, 请耐心等待============================="
if [[ $(curl -X PUT -w '%{http_code}' ${
REPO_URL} 2>/dev/null) == '401' ]]; then
echo "远程仓库【${REPO_URL}】访问通"
else
echo "错误:远程仓库【${REPO_URL}】访问不通, 请检查"
exit 1;
fi
echo -e "\n================待上传文件列表展示============================="
# 进入本地仓库,开始检索待上传的文件
cd ${LOCAL_REP_DIR}
# 1. 排除脚本本身、以及含archetype-catalog、maven-metadata-deployment、maven-metadata-deployment字符路径的文件
# 2. 最终筛选出的文件剃掉前面的./字符
# 3. 开始一个一个文件调用curl上传
# 特殊字符/添加上转义字符变为 \/
LOCAL_REP_DIR_ESCAPE=$(echo "${LOCAL_REP_DIR}" | sed 's/\//\\\//g')
# 当前目录待上传的文件
findUploadFiles=$(find . -type f -not -path "./$0" -not -name '*.sh' -not -regex "\(.*archetype-catalog.*\|.*maven-metadata-deployment.*\)\|.*maven-metadata-local.*")
findUploadFilesCount=$(echo "${findUploadFiles}" | sed '/^s*$/d' | wc -l)
if [ ${findUploadFilesCount} -gt 0 ]; then
#uploadFiles=$(find . -type f -not -path "./$0" -not -name '*.sh' -not -regex "\(.*archetype-catalog.*\|.*maven-metadata-deployment.*\)\|.*maven-metadata-local.*" | sed "s|^\./||")
uploadFiles=$( echo -e "${findUploadFiles}" | sed "s|^\./||")
fi
echo "$( [ ${
findUploadFilesCount} -gt 0 ] && ( echo "${uploadFiles}" | sed 's/^/'"${LOCAL_REP_DIR_ESCAPE}"'&/g') || echo '' )"
echo "文件个数:${findUploadFilesCount}"
if [ ${findUploadFilesCount} -eq 0 ]; then
echo -e "\n本地仓库无可上传的文件,脚本结束"
exit 0
fi
while [ true ]; do
echo -e '\n请检查上述文件路径是否是你需要上传的?【确定上传按y、取消上传按n】'
read ensureUpload
if [ $ensureUpload ] && [ $(echo $ensureUpload | tr [a-z] [A-Z]) == "Y" ]; then
echo -e "\n================已上传文件列表展示============================="
currentUploadedCount=0
#echo "${uploadFiles}" | sed "s|^\./||" | xargs -I '{}' sh -c 'echo 已上传文件: '"${LOCAL_REP_DIR}"'{};echo "========="'
echo "${uploadFiles}" | sed "s|^\./||" | xargs -I '{}' sh -c "curl -u '$USERNAME:$PASSWORD' -X PUT -v -T {} ${REPO_URL}/{} &>/dev/null ; echo '已上传文件: ${LOCAL_REP_DIR}{}'"
echo '本地仓库文件上传结束,脚本结束'
break
elif [ $ensureUpload ] && [ $(echo $ensureUpload | tr [a-z] [A-Z]) == "N" ]; then
echo "取消上传本地仓库文件,脚本结束"
break
else
echo -e "错误:[${ensureUpload}]非法字符,请根据提示输入对应的内容"
fi
done
用法1 - 指定本地仓库
# 帮助文档
sh enhanceMavenImport.sh help
sh enhanceMavenImport.sh --help
# 指定本地仓库路径
sh enhanceMavenImport.sh -l /www/server/maven/repository2 -u admin -p admin123 -r http://192.168.19.107:8082/repository/lrc
真正执行上传成功的操作
用法2 - 不指定本地仓库,脚本所在目录为本地仓库
# 帮助文档
sh enhanceMavenImport.sh help
sh enhanceMavenImport.sh --help
# 不指定本地仓库路径,以当前脚本所在的目录为仓库路径
# 切记:本地仓库与脚本的路径关系是父子关系
sh enhanceMavenImport.sh -u admin -p admin123 -r http://192.168.19.107:8082/repository/lrc
边栏推荐
- 老牌音乐播放器 WinAmp 发布 5.9 RC1 版:迁移到 VS 2019 完全重建,兼容 Win11
- 二叉树非递归遍历
- Several methods of mysql backup table
- 【Yugong Series】July 2022 Go Teaching Course 025-Recursive Function
- The difference between adding or not adding the ref keyword when a variable of reference type is used as a parameter in a method call in C#
- [Open class preview]: Research and application of super-resolution technology in the field of video image quality enhancement
- LeetCode 第 304 场周赛
- VOT2021比赛简介
- HTC使用官方固件作为底包制作rom卡刷包教程
- 顺序表的实现
猜你喜欢
【Acwing】第62场周赛 题解
Structure of the actual combat battalion module eight operations
The latest masterpiece!Alibaba just released the interview reference guide (Taishan version), I just brushed it for 29 days
Judging decimal points and rounding of decimal operations in Golang
高效并发:Synchornized的锁优化详解
MATLAB program design and application 2.4 Common internal functions of MATLAB
老牌音乐播放器 WinAmp 发布 5.9 RC1 版:迁移到 VS 2019 完全重建,兼容 Win11
Realize serial port receiving data based on STM32 ring queue
Unity-LineRenderer显示一条线
How to debug TestCafe
随机推荐
[Code Hoof Set Novice Village 600 Questions] Leading to the combination of formulas and programs
[QNX Hypervisor 2.2 User Manual]9.14 set
Transfer Learning - Domain Adaptation
BM5 merge k sorted linked lists
@JsonFormat(pattern="yyyy-MM-dd") time difference problem
useragent online lookup
标段参数说明
sqlite3简单操作
The article you worked so hard to write may not be your original
嵌入式开发没有激情了,正常吗?
Federated Learning: Multi-source Knowledge Graph Embedding in Federated Scenarios
BM3 flips the nodes in the linked list in groups of k
VOT2021比赛简介
了解下C# 匿名方法
MySQL数据库‘反斜杠\’ ,‘单引号‘’,‘双引号“’,‘null’无法存储
Unity-通过预制件和克隆方法动态实现各个UGUI下控件的创建和显示
NVIDIA has begun testing graphics products with AD106 and AD107 GPU cores
HTC using official firmware as bottom bag made ROM brush card bag tutorial
NVIDIA已经开始测试AD106和AD107 GPU核心的显卡产品
Basic Grammar Introduction of Carbon Tutorial (Tutorial)