在Linux主机使用命令行批量删除harbor镜像
在Linux主机使用命令行批量删除harbor镜像
脚本使用说明:
- 此脚本不是万能脚本,根据自身环境要调整很多
- 能用harbor的域名就不要用IP
- 脚本前半部分可以套用,后半部分需一步一步试错,结合自己的环境
- 参考文档为:https://www.cnblogs.com/xiyangxixi/p/10126106.html 感谢原文作者贡献
#! /bin/bash
# 通过Harbor提供的API来批量删除镜像,人工删除费时费力
# 经过测试发现,通过接口去删除时提供的是的标签,但实际上删除的时候通过的是镜像的IMAGE_ID,也就是说
# 如果我把同一个镜像tag多次上传到harbor,通过借口删除时,只需要提供其中一个标签,那么和这个镜像的IMAGE_ID相同的镜像都会删除
USERANDPASS="admin:12345}A"
ADDRESS="lulala.papa.com:1180"
#### 项目个数
lines=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/projects?" |grep "\"name\""|awk -F "\"" '{print $4}'|wc -l`
##### 展示当前有几个项目
echo "当前Harbor有以下几个项目:"
for i in $(seq 1 $lines)
do
###########具体是啥项目
a=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/projects?" |grep "\"name\""|awk -F "\"" '{print $4}'|awk -v b=$i 'NR==b{print $1}'`
echo $i、$a
done
#######选择具体的项目
read -p "请输入序号(1~$lines):,查看其下的镜像仓库:" number
if [ $number -ge 1 -a $number -le $lines ]
then
#########选择的是哪个项目
c=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/projects?" |grep "\"name\""|awk -F "\"" '{print $4}'|awk -v b=$number 'NR==b{print $1}'`
#####多少个仓库
d=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/projects?" |grep "$c" -C 2 |grep "project_id" |awk '{print $2}' |awk -F "," '{print $1}'`
#echo "\$d-----------$d"
######显示仓库个数
## e=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories?project_id=$d" | grep "\"name\"" |awk -F "\"" '{print $4}' |awk -F "/" '{print $2}'|wc -l`
e=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories?project_id=2" | grep "\"name\"" |awk -F "\"" '{print $4}' |sed 's/sc\///g'|wc -l`
####### 简单展示
echo "项目$c下有以下镜像仓库:"
for line in $(seq 1 $e)
do
#####具体的仓库名
f=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories?project_id=$d" | grep "\"name\"" |awk -F "\"" '{print $4}' |sed 's/sc\///g'|awk -v g=$line 'NR==g{print $1}'`
echo $line、$f
done
read -p "请输入序号(1~$e):,查看其下的镜像格式以及对应的数量:" num
if [ $num -ge 1 -a $num -le $e ]
then
#### 镜像仓库名字
h=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories?project_id=$d" | grep "\"name\"" |awk -F "\"" '{print $4}' |sed 's/sc\///g'|awk -v g=$num 'NR==g{print $1}' | awk -F "/" '{print $2}'`
echo "您选择的仓库是$h"
#### 标签类型种类个数
# i=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}' | cut -c -6 |sort -n |uniq|wc -l`
# echo $i
#### 标签类型以及个数
echo "##################################"
echo "镜像格式为:dev或者是qa"
echo "##################################"
#####每种镜像格式以及其数量
#curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}' | cut -c -6 |awk '{count[$1]++}END{for (i in count)print i,count[i]}'
######输入镜像格式,进行删除
echo "如果想删除某种形式的镜像,请输入类型:"
read image_format
##########输入类型的所有镜像
images=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}'|grep $image_format|awk '{print $1}' | sed 's/\(.*\)-\(.*\)/\2/g' | sort -n | awk 'NR!=1 {print image_format"-"$1}' image_format="$image_format"`
#########统计镜像个数
#count_image=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}'|grep $image_format|wc -l`
COUNTA=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}'|grep $image_format|awk '{print $1}' | sed 's/\(.*\)-\(.*\)/\2/g' | sort -n | awk 'NR!=1 {print image_format"-"$1}' image_format="$image_format"| wc -l`
COUNTB=10
COUNTC=`expr ${COUNTA} - ${COUNTB} | bc`
imagesA=`curl -s -u "$USERANDPASS" -X GET -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}'|grep $image_format|awk '{print $1}' | sed 's/\(.*\)-\(.*\)/\2/g' | sort -n | awk 'NR!=1 {print image_format"-"$1}' image_format="$image_format" | head -${COUNTC}`
for image_label in $imagesA
do
#############执行删除
curl -u "$USERANDPASS" -X DELETE -H "Content-Type: application/json" "https://$ADDRESS/api/repositories/$c%2F$h/tags/$image_label"
done
if [ $? -eq 0 ]
then
echo "删除成功"
fi
fi
fi
在Linux主机使用命令行批量删除harbor镜像的更多相关文章
- svn命令行批量删除和批量添加
svn命令行批量删除和批量添加 如果使用svn的命令行,例如在linux下的终端中使用,svn的添加命令是svn add,删除命令是svn del,但是缺乏批量的操作,如果我在资源管理器中,手动添加了 ...
- Linux命令行批量删除文件(目录)
快速-批量删除文件或目录 1-1.快速删除大文件夹(注意目录后的结束符'/')(对于含有海量文件的目录,不能直接rm -rf删除,这样效率很慢:) rsync -a --delete blank/ t ...
- 自定义表单SQL命令行批量删除垃圾留言
1.每天被恶意留言困扰,花费大量的时间去清理却效果不理想,对于没有能力做二次开发并且靠纯手工删除留言的菜鸟来讲是一个大麻烦. 2.大家都知道织梦的留言内容是存在数据库里的,而数据库的内容是可以批量删除 ...
- mac 命令行批量删除.svn[转]
mac下.svn是隐藏文件,而且即使我们调成可见的,一个一个删也很麻烦.今天正好同事问起来这个命令,于是想可能有些人也需要,于是还是放到博客里吧 命令比较简单,其实就是一条linux命令,打开终端,首 ...
- redis命令行批量删除匹配到的key
执行命令如下 redis-cli -h 12.132.30.21 -p 6379 -a 2016 -n 4 keys "ecard*" | xargs redis-cli -h 1 ...
- Linux命令行批量替换多文件中的字符串【转】
Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...
- mac linux rename命令行批量修改文件名
我的mac使用命令行批量修改名字时发现居然没有rename的指令: zsh: command not found: rename 所以使用HomeBrew先安装一下: ➜ ~ brew install ...
- 如何用SQL命令行工具删除dedecms指定id文章
用dedecms采集时标题字段设置错了,出现了注释符号<!---->,导致后台的文章列表出现错误,也无法直接从列表中删除,可以远程登录数据库去操作,这个相对比较麻烦,想着直接从后台的SQL ...
- Linux(CentOS 7)命令行模式安装VMware Tools 详解
本篇文章主要介绍了如何在Linux(CentOS 7)命令行模式安装VMware Tools,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 本例中为在Linux(以CentOS 7为例)安装VM ...
随机推荐
- Oracle系列六 分组函数
分组函数作用于一组数据,并对一组数据返回一个值. 组函数类型 AVG COUNT MAX MIN STDDEV SUM 组函数语法 SELECT [column,] group_function(co ...
- Docker 安装 MySQL 并实现远程连接
获取 MySQL 镜像 docker pull mysql:5.6 查看镜像列表 docker images 启动 MySQL 镜像 docker run -itd -P mysql:5.6 bash ...
- Python 初级 6 循环 (二)
一.复习 1 for循环 for looper in [1, 2, 3, 4]: print("hello") 1) 每次循环开始,会依次把列表中的数按顺序赋值给looper,第一 ...
- matlab学习笔记10_4MATLAB中的字符串表示
一起来学matlab-字符串操作 10_4 MATLAB中的字符串表示 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感 ...
- Python - Django - form 组件自定义校验
reg2.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Postman:上传文件测试
1.设置好接口地址与提交方法 2.设置header Content-Type:multipart/form-data 3.设置body 选择为:form-data key要和服务器端保持一致 选择好自 ...
- dataTable.NET的search box每輸入一個字母進行一次檢索的問題
當使用dataTable.NET時,可以通到簡單的setting來添加一個search box進行全表格的檢索. $('#test-listing') .on('order.dt', function ...
- 在CentOS 7中 使用 Nginx 反代 .Net Core
很久没弄 .Net Core 了,然后忽然发现Windows自带的 Hyper-V 虚拟机貌似挺好用的 .Net Core 之前都是用 Jexus 来做服务器,忽然想用下Nginx来试试 1.在 Ce ...
- Get Docker Engine - Community for Ubuntu
Get Docker Engine - Community for Ubuntu Uninstall old versions$ sudo apt-get remove docker docker-e ...
- ES6新增的一些特性
1.let关键字,用来代替 var的关键字,特点: 1.变量不允许被重复定义 2.不会进行变量声明提升 3.保留块级作用域中i的 2.const定义常量,特点:1.常量值不允许被改变 2.不会进行变量 ...