当前位置:网站首页>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




边栏推荐
- MySQL数据库‘反斜杠\’ ,‘单引号‘’,‘双引号“’,‘null’无法存储
- C language parsing json string (json object is converted to string)
- 21. Support Vector Machine - Introduction to Kernel Functions
- 22年8月推广大使额外奖励规则
- BM3 将链表中的节点每k个一组翻转
- Verilog implements a divide-by-9 with a duty cycle of 5/18
- Go mode tidy reports an error go warning “all” matched no packages
- 关注!海泰方圆加入《个人信息保护自律公约》
- 标段参数说明
- GateWay implements load balancing
猜你喜欢

A shortcut to search for specific character content in idea

Implementation of a sequence table

Bionic caterpillar robot source code

Flex layout in detail

【ACM】2022.7.31训练赛

架构实战营模块 8 作业

Flink_CDC construction and simple use

Go1.18 upgrade function - Fuzz test from scratch in Go language

一款国外开发的高质量WordPress下载站模板主题

老牌音乐播放器 WinAmp 发布 5.9 RC1 版:迁移到 VS 2019 完全重建,兼容 Win11
随机推荐
HTC using official firmware as bottom bag made ROM brush card bag tutorial
【论文精读】iNeRF
22年8月推广大使额外奖励规则
[QNX Hypervisor 2.2用户手册]9.15 suppress
嵌入式开发没有激情了,正常吗?
GateWay implements load balancing
sqlite3简单操作
JS basic exercises
如何减少软件设计和实现之间鸿沟
Implementation of a sequence table
如何导入 Golang 外部包并使用它?
Redis Overview: Talk to the interviewer all night long about Redis caching, persistence, elimination mechanism, sentinel, and the underlying principles of clusters!...
Realization of character makeup
「APIO2010」巡逻 题解
I don't know what to do with sync issues
sqlite3 simple operation
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#
#yyds干货盘点# 面试必刷TOP101:链表中环的入口结点
In Golang go-redis cluster mode, new connections are constantly created, and the problem of decreased efficiency is solved
"The core concept of" image classification and target detection in the positive and negative samples and understanding architecture