1Password の保管庫から URL が入力されていないアイテムを抽出する
TL;DR
「ログイン」カテゴリのアイテムのうち、URL フィールドが一つも入力されていないものを抽出するコマンド↓
code:console
op item list --categories Login --format=json | jq 'map(select(has("urls") | not) | {category: .category, title: .title}) | sort_by(.title)'
実行するとこういう感じで結果が得られる
code:output.json
[
...,
{
"category": "LOGIN",
"title": "東京都水道局"
},
{
"category": "LOGIN",
"title": "鳥貴族"
}
]
hr.icon
モチベーション
1Password の保管庫に保存するアイテムが多すぎて管理不能になってきた
Watchtower を活用するにはアイテムに紐づく Web サイトの URL を入力しておく必要がある
パスワード漏洩のアラートや、MFA/パスキーが利用できます通知をもれなく受け取りたい!
ファビコンもつくようになって賑やかになる
1Password に自動保存されたアイテムには URL が設定されていなかったりするアイテムがある
それらを抽出したい
実現方法
1Password CLI と jq でやった
op item list は自分のアカウントからアイテムを列挙するコマンド
--categories でアイテムのカテゴリを、--vault で保管庫名で絞り込みができる
--format=json で JSON 形式で出力させるとこういう感じ
code:json
[
...,
{
"id": "abcdefg12345",
"title": "鳥貴族",
"version": 1,
"vault": {
"id": "abcdefg12345",
"name": "Private"
},
"category": "LOGIN",
"last_edited_by": "xxx",
"created_at": "2023-05-03T02:03:27Z",
"updated_at": "2023-05-03T02:03:27Z"
}
]
jq で特定のフィールドを持たないオブジェクトを抽出するには has() と not を組み合わせる
'map(select(has("urls") | not)' は配列の要素のうち、urls を持たないオブジェクトを抽出する
パイプで結合し、| {category: .category, title: .title}) するとほしいフィールドだけを出力できる
sort_by(.title) はアイテムのタイトルの値で昇順ソートできる