notmuchデータベースの既存のmaildirメッセージファイル名からnotmuchメッセージIDとスレッドIDを取得するには?

notmuchデータベースの既存のmaildirメッセージファイル名からnotmuchメッセージIDとスレッドIDを取得するには?

ファイルを返すクエリを作成するとします。

$ 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'

関連情報