帮我写一个shell脚本,当镜像名一样的进行判断,如果大于3个,就把旧的镜像删除,只保留两个最近的镜像,我也不知道具体镜像名,全部都筛选一遍吧
时间: 2024-04-21 18:22:14 浏览: 18
好的,下面是一个Shell脚本,它将筛选出所有镜像,并根据镜像名进行判断,如果某个镜像名出现超过3次,则删除旧的镜像,只保留最近的两个镜像:
```bash
#!/bin/bash
# 获取所有镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)
# 获取所有镜像名
image_names=$(echo "$image_list" | cut -d "|" -f 1 | uniq)
# 遍历每个镜像名
for image_name in $image_names; do
# 获取特定镜像名的镜像列表
filtered_images=$(echo "$image_list" | grep "$image_name")
# 获取镜像数量
image_count=$(echo "$filtered_images" | wc -l)
# 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
if [ $image_count -gt 3 ]; then
images_to_delete=$((image_count - 2))
images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)
for image in $images_to_delete_list; do
docker image rm $image
done
echo "针对镜像名 $image_name:旧的镜像已删除,只保留最近的两个镜像。"
else
echo "针对镜像名 $image_name:无需删除镜像,数量未超过3个。"
fi
done
```
这个脚本将获取所有镜像列表,并按照创建时间排序。然后,它会提取出所有的镜像名,并遍历每个镜像名。对于每个镜像名,它会筛选出与之匹配的镜像列表,并根据镜像数量判断是否需要删除旧的镜像,只保留最近的两个镜像。最后,会输出相应的操作结果。
请确保在执行脚本之前已经安装了Docker,并具有执行脚本的权限。
阅读全文