ファイルを返すクエリを作成するとします。
$ notmuch search --output=files tag:inbox from:love
これにより、Maildir メッセージを指すファイルのリストが返されます。次に、次のファイルのいずれかを選択します(すでにnotmuchデータベースにあります)。
FILENAME=$(notmuch search --output=files tag:inbox from:love | fzf)
NotMuchデータベースからメッセージIDとスレッドIDを取得したいと思います。$FILENAME変数でいくつかのメッセージIDを見つけたいです。
これを行う非常に粗雑な方法は、ファイルを解析し、/ subject / dataからヘッダーを読み取り、いくつかのクエリを実行することですnotmuch search from:{...} subject:{...} date:{..}
。しかし、ファイル名はすでにデータベースに保存されているので、ファイル名からメッセージIDを取得するための正式で信頼性の高い方法が必要だと思いました。
ありがとうございます!
答え1
ついに多くのPythonバインディングで方法を見つけました。https://notmuch.readthedocs.io/projects/notmuch-python/en/latest/database.html?highlight=filename#notmuch.Database.find_message_by_filename
ライナーの効果的な打撃は次のとおりです。
threadId=$(python3 -c "import notmuch; db = notmuch.Database(); print(db.find_message_by_filename('$FILENAME').get_thread_id())");
解凍されたpython3コードは次のとおりです。
import notmuch
db = notmuch.Database()
msg = db.find_message_by_filename('filename of the maildir message')
msg.get_thread_id()
答え2
maildirファイル名に基づいてnotmuchデータベースを検索する方法が見つかりませんでした。検索語が多い (7)
Message-Id を繰り返して、検索から直接 Message-Id および NotMuch スレッド ID を取得できます。
for message_id in $(notmuch search --output=messages 'tag:inbox from:love')
do
thread_id=$(notmuch search --output=threads $message_id)
echo "$thread_id - $message_id"
done
あるいは、スレッドを繰り返して関連するメッセージIDを取得することもできます。
for thread_id in $(notmuch search --output=threads 'tag:inbox from:love')
do
# sed is here only to provide the output in the same format as in the first example
notmuch search --output=messages $thread_id | sed "s/^/$thread_id - /"
done
どちらがあなたのニーズに適しているか。両方のforループは、次の形式で結果を印刷します。
thread:THREAD_ID - id:MESSAGE_ID
…
手に入れたいなら~から、日付、トピックヘッダーを使用すると、jqを使用してmaildirファイルを解析せずにnotmuchデータベースから直接ヘッダーを抽出できます。メール(1)または同様のツール。
notmuch search --format=json id:MESSAGE_ID | jq -r '.[].subject'