假设我做了一个返回文件的查询:
$ 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/date 读取标头并进行不多的查询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-Ids 直接从搜索中获取 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
…
如果你想得到从,日期,主题headers 您还可以使用 jq 直接从 notmuch 数据库中提取它,而不需要使用解析 maildir 文件邮件(1)或类似的工具。
notmuch search --format=json id:MESSAGE_ID | jq -r '.[].subject'