gpt4 book ai didi

shell - 每组打印前N行->删除所有docker镜像,每个镜像名称的最新N个除外

转载 作者:行者123 更新时间:2023-12-02 19:02:09 25 4
gpt4 key购买 nike

用例:通过删除旧的Docker镜像清理磁盘空间

以该图像为例。

REPOSITORY          TAG                                        IMAGE ID            CREATED             SIZE
gateway 2f280f169e9b018c3ee155e47e176c3418349b90 846b7ba3595c 9 hours ago 597MB
gateway latest 846b7ba3595c 9 hours ago 597MB
gateway 2f280f169e9b018c3ee155e47e176c3418349b90 e47e176c3418 9 hours ago 597MB
order 2f280f169e9b018c3ee155e47e176c3418349b90 0e01f7594e4a 9 hours ago 591MB
order latest 0e01f7594e4a 9 hours ago 591MB
order 2f280f169e9b018c3ee155e47e176c3418349b90 7e176c34183a 9 hours ago 591MB
payment 2f280f169e9b018c3ee155e47e176c3418349b90 e2053260d33e 9 hours ago 590MB
payment latest e2053260d33e 9 hours ago 590MB
payment 2f280f169e9b018c3ee155e47e176c3418349b90 169e9b018c3e 9 hours ago 590MB
price-offer 2f280f169e9b018c3ee155e47e176c3418349b90 5a4726a65fbd 9 hours ago 589MB

我想删除所有图像,但始终为每个名称/存储库保留最新的N张图像。

所以在这里,我有3个网关,3个订单,3个付款和1个报价图像。
如果我以N = 2运行脚本,则应删除最旧的网关,订单,付款图像,而不要删除单个报价图像。
如果我以N = 1运行脚本,它将仅保留每个存储库/名称的最新镜像。

目前我有这个:
docker images | tail -n+2 | awk '{ print $1,$3 }' | sort -r

这给了我:
gateway  e47e176c3418
gateway 846b7ba3595c
gateway 846b7ba3595c
order 7e176c34183a
order 0e01f7594e4a
order 0e01f7594e4a
payment 169e9b018c3e
payment e2053260d33e
payment e2053260d33e
price-offer 5a4726a65fbd

但是我在为每张图像只打印前N行(其中$ 1是相同的)的部分中苦苦挣扎。

最佳答案

您可以使用此awk命令列出所有最新的N图像:

docker images | awk -v N=2 '++freq[$1] <= N'

要删除所有最旧的图像并保留最新的 N图像,请使用:
docker images | awk -v N=2 '++freq[$1] > N {print $3}' | xargs -p docker rmi

关于shell - 每组打印前N行->删除所有docker镜像,每个镜像名称的最新N个除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com