파일을 반환하는 쿼리를 만든다고 가정해 보겠습니다.
$ 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
마침내 많지 않은 파이썬 바인딩을 통해 방법을 찾았습니다.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'