Homebrew で明示的にインストールしたパッケージ名だけを一覧にするコマンド


コマンド

brew info --installed --json=v1 \
    | jq -r '.[] | select(.installed | any(.installed_on_request)) | .name'

出力例

autoconf
awscli
berkeley-db
carthage
clang-format

解説

brew info --installed --json=v1 はインストール済みのパッケージ情報を出力する。 --json=v1 オプションで出力を JSON 形式にする。

JSON 形式のパッケージ情報の例を以下に示す。 installed_on_request プロパティはそのパッケージが brew install コマンドによって明示的にインストールされたら true になる。 false ならそのパッケージが他のパッケージの依存関係として暗黙的にインストールされたことを表す。 このプロパティに対応していなかった昔の Homebrew でインストールした場合は null になるかもしれない(確かめていない)。

[
  {
    "name": "zsh",
    ...
    "installed": [
      {
        "version": "5.7.1",
        ...
        "installed_as_dependency": false,
        "installed_on_request": true
      }
    ],
    ...
  }
]

このパッケージ情報を jq でフィルタリングしてパッケージ名を取り出す。jq 1.6 のマニュアル

jq -r '.[] | select(.installed | any(.installed_on_request)) | .name'

-r オプションで出力を生の文字列にする。そうしなければ JSON の文字列リテラル(ダブルクォートされた文字列)が出力されてしまう。

'.[] | select(.installed | any(.installed_on_request)) | .name' で条件を満たすパッケージの名前を出力する。

  • 入力はパッケージ情報オブジェクトの配列
  • .[]: 各パッケージ情報オブジェクトについて
  • | select(...): 条件に一致したオブジェクトを選ぶ
    • 条件 .installed | any(.installed_on_requst)installed 配列の要素に installed_on_request が真のものがひとつでもあれば真
  • | .name: 各オブジェクトの name を出力

執筆時点の環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G1012

$ brew --version
Homebrew 2.2.0-14-gb89ec55
Homebrew/homebrew-core (git revision 808d3; last commit 2019-11-28)
Homebrew/homebrew-cask (git revision 5266f2; last commit 2019-11-28)

$ jq --version
jq-1.6