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

x33g5p2x  于2022-08-17 转载在 其他  
字(4.3k)|赞(0)|评价(0)|浏览(989)
脚本内容

增加内容:

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

enhanceMavenImport.sh

  1. #!/bin/bash
  2. # author: LinRuChang
  3. # date: 2022-07-27 04:15:00
  4. # desc: nexus上传脚本
  5. # use
  6. # 第一种:sh enhanceMavenImport.sh -l 本地仓库目录绝对路径 -u nexus账号 -p nexus密码 -r 远程私库的URL地址
  7. # sh enhanceMavenImport.sh绝对路径 -l /www/server/maven/repository2 -u admin -p admin123 -r http://192.168.19.107:8082/repository/lrc
  8. #
  9. # 第二种:将此脚本放入本地仓库目录里面,然后执行即可- 【切记本地仓库目录与脚本的路径关系的是父子关系,非孙子辈等关系】
  10. # sh enhanceMavenImport.sh绝对路径 -u nexus账号 -p nexus密码 -r 远程私库的URL地址
  11. if [[ $1 == 'help' || $1 == '--help' ]]; then
  12. echo "用法: sh $(readlink -f $0) -l 本地仓库绝对路径 -u nexus账号 -p nexus密码 -r 远程仓库URL地址 "
  13. exit 0
  14. fi
  15. while getopts ":l:r:u:p:" opt; do
  16. case $opt in
  17. l) LOCAL_REP_DIR="$OPTARG"
  18. ;;
  19. r) REPO_URL="$OPTARG"
  20. ;;
  21. u) USERNAME="$OPTARG"
  22. ;;
  23. p) PASSWORD="$OPTARG"
  24. ;;
  25. esac
  26. done
  27. # 如果不传-l本地仓库路径,则以当前脚本所在的目录的本地仓库路径
  28. if [[ -z ${LOCAL_REP_DIR} ]]; then
  29. #LOCAL_REP_DIR=$(pwd)
  30. LOCAL_REP_DIR=$(readlink -f $0 | xargs dirname)
  31. fi
  32. echo "================入参============================="
  33. LOCAL_REP_DIR=$( ( echo ${LOCAL_REP_DIR} | grep '.*\(/\)$' &>/dev/null ) && echo ${LOCAL_REP_DIR} || echo ${LOCAL_REP_DIR}'/' )
  34. echo "待上传的本地仓库地址:${LOCAL_REP_DIR}"
  35. echo "Nexus账号:${USERNAME}"
  36. echo "Nexus密码:${PASSWORD}"
  37. REPO_URL=$( ( echo ${REPO_URL} | grep '.*\(/\)$' &>/dev/null ) && echo ${REPO_URL} || echo ${REPO_URL}'/' )
  38. echo "远程仓库URL地址:${REPO_URL}"
  39. echo "============================================="
  40. if [[ ${USERNAME} && ${PASSWORD} && ${REPO_URL} && -d ${LOCAL_REP_DIR} ]]; then
  41. echo "入参非空校验通过!!!"
  42. else
  43. echo "错误:可能Nexus的账号u、密码p、远程仓库地址r信息有缺失,或者本地仓库目录l不存在,请检查"
  44. echo "用法: sh $(readlink -f $0) -l 本地仓库绝对路径 -u nexus账号 -p nexus密码 -r 远程仓库URL地址 "
  45. exit 1;
  46. fi
  47. echo -e "\n================检测远程目录地址网络连通性, 请耐心等待============================="
  48. if [[ $(curl -X PUT -w '%{http_code}' ${REPO_URL} 2>/dev/null) == '401' ]]; then
  49. echo "远程仓库【${REPO_URL}】访问通"
  50. else
  51. echo "错误:远程仓库【${REPO_URL}】访问不通, 请检查"
  52. exit 1;
  53. fi
  54. echo -e "\n================待上传文件列表展示============================="
  55. # 进入本地仓库,开始检索待上传的文件
  56. cd ${LOCAL_REP_DIR}
  57. # 1. 排除脚本本身、以及含archetype-catalog、maven-metadata-deployment、maven-metadata-deployment字符路径的文件
  58. # 2. 最终筛选出的文件剃掉前面的./字符
  59. # 3. 开始一个一个文件调用curl上传
  60. # 特殊字符/添加上转义字符变为 \/
  61. LOCAL_REP_DIR_ESCAPE=$(echo "${LOCAL_REP_DIR}" | sed 's/\//\\\//g')
  62. # 当前目录待上传的文件
  63. findUploadFiles=$(find . -type f -not -path "./$0" -not -name '*.sh' -not -regex "\(.*archetype-catalog.*\|.*maven-metadata-deployment.*\)\|.*maven-metadata-local.*")
  64. findUploadFilesCount=$(echo "${findUploadFiles}" | sed '/^s*$/d' | wc -l)
  65. if [ ${findUploadFilesCount} -gt 0 ]; then
  66. #uploadFiles=$(find . -type f -not -path "./$0" -not -name '*.sh' -not -regex "\(.*archetype-catalog.*\|.*maven-metadata-deployment.*\)\|.*maven-metadata-local.*" | sed "s|^\./||")
  67. uploadFiles=$( echo -e "${findUploadFiles}" | sed "s|^\./||")
  68. fi
  69. echo "$( [ ${findUploadFilesCount} -gt 0 ] && ( echo "${uploadFiles}" | sed 's/^/'"${LOCAL_REP_DIR_ESCAPE}"'&/g') || echo '' )"
  70. echo "文件个数:${findUploadFilesCount}"
  71. if [ ${findUploadFilesCount} -eq 0 ]; then
  72. echo -e "\n本地仓库无可上传的文件,脚本结束"
  73. exit 0
  74. fi
  75. while [ true ]; do
  76. echo -e '\n请检查上述文件路径是否是你需要上传的?【确定上传按y、取消上传按n】'
  77. read ensureUpload
  78. if [ $ensureUpload ] && [ $(echo $ensureUpload | tr [a-z] [A-Z]) == "Y" ]; then
  79. echo -e "\n================已上传文件列表展示============================="
  80. currentUploadedCount=0
  81. #echo "${uploadFiles}" | sed "s|^\./||" | xargs -I '{}' sh -c 'echo 已上传文件: '"${LOCAL_REP_DIR}"'{};echo "========="'
  82. echo "${uploadFiles}" | sed "s|^\./||" | xargs -I '{}' sh -c "curl -u '$USERNAME:$PASSWORD' -X PUT -v -T {} ${REPO_URL}/{} &>/dev/null ; echo '已上传文件: ${LOCAL_REP_DIR}{}'"
  83. echo '本地仓库文件上传结束,脚本结束'
  84. break
  85. elif [ $ensureUpload ] && [ $(echo $ensureUpload | tr [a-z] [A-Z]) == "N" ]; then
  86. echo "取消上传本地仓库文件,脚本结束"
  87. break
  88. else
  89. echo -e "错误:[${ensureUpload}]非法字符,请根据提示输入对应的内容"
  90. fi
  91. done
用法1 - 指定本地仓库
  1. # 帮助文档
  2. sh enhanceMavenImport.sh help
  3. sh enhanceMavenImport.sh --help
  4. # 指定本地仓库路径
  5. sh enhanceMavenImport.sh -l /www/server/maven/repository2 -u admin -p admin123 -r http://192.168.19.107:8082/repository/lrc

真正执行上传成功的操作

用法2 - 不指定本地仓库,脚本所在目录为本地仓库
  1. # 帮助文档
  2. sh enhanceMavenImport.sh help
  3. sh enhanceMavenImport.sh --help
  4. # 不指定本地仓库路径,以当前脚本所在的目录为仓库路径
  5. # 切记:本地仓库与脚本的路径关系是父子关系
  6. sh enhanceMavenImport.sh -u admin -p admin123 -r http://192.168.19.107:8082/repository/lrc

相关文章