1Password CLIで添付ファイルがあるアイテムの一覧を取得するワンライナー
以下のワンライナーで1Password CLIコマンドを使って添付ファイルがあるアイテムの一覧を取得できる。
$ op item list --format=json | \
op item get - --format=json | \
jq -r 'select(.files != null) | [.vault.name, .title] | @tsv'
コマンドのポイント
op item list --format=json
op
コマンドでは添付ファイルはop item get
コマンドの結果で確認できる。
通常op item get
コマンドはUUIDなどを指定して1件ごとに取得する。
しかし標準入力で所定のJSON形式のデータを受け取ることで複数のアイテムを取得できる。
そのop item list --format=json
で全てのアイテムをJSON形式で取得できる。
この時点で以下のような出力となる。
[
{
"id": "",
"title": "",
"version": 1,
"vault": {
"id": "",
"name": ""
},
(省略)
},
{ "id": "", "title": "", "version": 1,
"vault": {
"id": "",
"name": ""
},
(省略)
},
(省略)
]
op item get - --format=json
op item list --format=json
コマンドで作成したJSON形式のデータを、
op item get
コマンドの引数に-
を指定して標準入力として受け取る。
このようにするとop item list --format=json
コマンドで取得した全てのアイテムをop item get
コマンドで取得できる。
次にjq
コマンドで解析するために--format=json
オプションをつけてJSON形式で出力する。
この時点では以下のようなJSONとなっている。
{
"id": "",
(省略)
}
{
"id": "",
(省略)
"files": [
{
"id": "pbdc22jqtzgcpnggqnssb6rcsy",
"name": "1Password Emergency Kit A3-993YVA-netreqscoltd.pdf",
"size": 46137,
"content_path": "/v1/vaults/ni5i5u5fcfgvpebenhxpimjvsy/items/dmkkbvybjnrx7ongo72aqtnxn4/files/pbdc22jqtzgcpnggqnssb6rcsy/content"
}
]
(省略)
}
添付ファイルがあるアイテムはfiles
キーが存在する。
全体で1つのJSONとなっておらず、複数のJSONが連続している形で出力されているが後のjq
コマンドではこの状態でもそのまま入力できるので問題ない。
jq -r 'select(.files != null) | [.vault.name, .title] | @tsv'
jq
コマンドでJSON形式のデータを解析する。
files
キーが存在するアイテムのみを抽出するためにselect(.files != null)
を使う。
保管庫名とタイトルのみを出力するために[.vault.name, .title]
を指定し、@tsv
を使ってタブ区切りで出力する。
最終的に以下のような出力となる。
保管庫名1 タイトル1
保管庫名1 タイトル2
保管庫名1 タイトル3
保管庫名2 タイトル4
保管庫名2 タイトル5
…
出力項目を変更する場合は、一旦op item get - --format=json
までの結果のJSONを見て出したい項目のキーを確認し、
[.vault.name, .title]
の部分を変更する。
CSVで出力する場合は@tsv
の代わりに@csv
を指定する。
注意点
最初のop item list --format=json
で全てのアイテムを取得するため、アイテムが多い場合は時間がかかる。
このコマンドの時点である程度絞れる場合は絞った方がよい。
例えばop item list --vault=保管庫名 --format=json
のように保管庫を指定することで絞ることができる。
その他、op item list --help
でオプションを確認し、絞れるだけ絞ったほうがよい。