[Linux]一覧表示した結果から、ループで順次実行するコマンドを1行で書いてみる

5月 14, 2021

Linuxコマンドの小技の紹介です。
今回はDockerコマンドを使っていますが、Linux全般の操作で活用できると思います。

Dockerを勉強でいじっていたのですが、不要になったDocker Imageが増えてしまい、削除がめんどくさいなあとなりました。

なんとか楽にできる方法を模索してみたので、まとめておきます。

従来の自分のやりかた

まず、以下のコマンドで一覧を取得してー、、

docker ps -a

1行ずつコンテナIDを指定して、以下のコマンドを実行していく感じ、、

docker rm [コンテナID]

消したいイメージ数分実行しないといけないので、とても大変です。

なんとか捻り出したやりかた

シェルでループにしてー、って書けばできそうだけど、それもめんどくさい。

なんとかコマンド一発でやりたいと思い、以下のコマンドを書きました。

docker ps -a |awk '{print $1}'| while read LINE; do docker rm $LINE; done

docker ps -aで一覧を取得します。
その一覧に対して、awkを使って、コンテナIDのみ取得します。
そうするとコンテナIDの一覧となるので、whileで順次コンテナIDを指定して、docker rmで削除していく、という方法です。

削除対象の条件を追加したいなどの要望が出てきたら、grepなんかを使えば実現できそうな気がしてきています。

ひとまず、コマンド一発で不要なdocker imageをまとめて削除できました。

IT

Posted by papa