Help us understand the problem. What is going on with this article?

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
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away