bash - 需要简单的脚本来删除所有超过 4 周的 docker 镜像

标签 bash shell docker awk sh

我知道以前有人问过类似的问题,但我找不到任何能完全满足我需要的问题。我也在 Docker 社区论坛上询问过,但没人能提供帮助。

我无权访问新的 docker image prune 命令,因为我无法从当前版本 1.11.2 升级到最新的 whizzy 1.13,但我需要一个简单的脚本,它可以在 cron 下运行以删除超过 1 个月的所有图像,无论是否悬挂。我不需要担心容器,因为这是来自仅存储图像的存储库。

如果 docker images 将“4 周”报告为“1 个月”,那会很简单,我可以使用类似的东西

docker images | grep " [months]* "

并将输出通过管道传递给 docker rmi 命令。但是,由于它似乎以最多 11 周的“周”为单位进行报告,而一旦图像超过 3 个月或更久,则只能以“月”为单位进行报告,因此我无法执行此操作。

docker images | grep " [months|weeks]* ago" | awk '{print $3,$4,$5}'

会给我这个输出::

6828f152f9cc 2 weeks
52a7412befd3 2 weeks
04c2b29e5e08 2 weeks
cdfb37d22663 2 weeks
ca38a8cabb2b 3 weeks
8b043f2395ba 3 weeks
2aa8b20380a0 3 weeks
1ac7dcf35935 9 weeks
f80873c4845b 9 weeks
d5700d37ee95 9 weeks
594dc21de8de 9 weeks
0c9dacb7fa7c 10 weeks
11f3eec60e17 3 months
b13ebf1a4999 3 months
68b0d6a3be3b 7 months
baadc9c8b0ce 8 months
10eb0d6b2b99 9 months

...但我一直在试图弄清楚如何测试 $4,$5 以仅包含“月”或 >=“4 周”的任何内容,然后可以通过管道将其传递给 docker rmi 。任何人都可以提供一些简单的代码来执行此操作吗?

最佳答案

只是awk需要:

docker images |awk '$5=="months" || ($4>4 && $5=="weeks") {print $3,$4,$5}'

解释

如果第 5 个字段是“月”或等于“周”并且第 4 个大于 4,则打印所需的列。

关于bash - 需要简单的脚本来删除所有超过 4 周的 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364394/

相关文章:

linux - BASH while 循环和 qt-faststart

arrays - JSON 列表(不是对象)到 Bash 数组?

linux - 如何使用 wget 下载网页的全部内容(首页)

bash - 等等,在 shell 脚本中不工作?

docker - Docker Swarm:Calico节点Pod不健康

ruby-on-rails - Docker无法在rspec测试目录中看到更新的夹具CSV

docker - 无法在Docker中链接Consul和Spring Boot应用

bash - 在 bash 命令输出中添加前缀

bash - 使用 xargs 获取参数索引?

java bash命令问题