• Shell常用脚本:Nexus批量上传本地仓库增强版脚本(强烈推荐)


    脚本内容

    增加内容:

    1. 消息提示更加人性化
    2. 校验本地仓库是否存在
    3. 校验远程仓库是否网络连通
    4. 上传前有文件确认操作
    5. 显示待上传的文件总数,仓库无待上传的文件直接结束脚本


    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    用法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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    真正执行上传成功的操作
    在这里插入图片描述

    在这里插入图片描述

    用法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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    微信小程序rich-text里面写多行溢出显示省略号在ios中不显示的问题
    Pentaho Kettle Cluster Principle
    docker安装grafana,prometheus,exporter以及springboot整合详细教程(GPE)
    测试用例和自动化测试脚本也可以像代码一样复用
    MySQL 权限分配
    C语言之结构体(Struct)
    McDSP APB 16评测-终极的模拟处理器?
    Java基础深化和提高-------IO流
    Redis:2023年的必修课,不学就要被市场淘汰
    使用 类加载器 或者 类对象 读取文件
  • 原文地址:https://blog.csdn.net/weixin_39651356/article/details/126007459