Как получить идентификатор сообщения notmuch -и идентификатор потока -из имени файла сообщения maildir, уже находящегося в базе данных notmuch?

Принятый ответ не сработает, если нужно скопировать чужой открытый ключ на несколько машин. Итак, я придумал следующее решение:

cat add-vassal-tc-agents.sh

#!/bin/bash
set -x # enable bash debug mode
if [ -s vassal-public-key.pub ]; then # if file exists and not empty
    for ip in `cat tc-agents-list.txt`; do # for each line from the file
        # add EOL to the end of the file (i.e., after the last line)
        # and echo it into ssh, where it is added to the authorized_keys
        sed -e '$s/$/\n/' -s vassal-public-key.pub | ssh "$ip" 'cat >> ~/.ssh/authorized_keys'
    done
else
    echo "Put new vassal public key into./vassal-public-key.pub to add it to tc-agents-list.txt hosts"
fi

Этот сценарий добавляет новый ключ пользователям в список машин при условии, что среда, в которой он запущен, имеет доступ.

Примерtc-agents-list.txt:

root@10.10.0.1
root@10.10.0.2
root@10.10.0.3
root@10.10.0.4

Примечание :Это требует использования GNU sed. Поскольку в вопросе указано "Linux", GNU sed, вероятно, присутствует.

1
26.08.2020, 00:03
2 ответа

В конце концов я нашел путь через немногочисленные привязки Python, см.https://notmuch.readthedocs.io/projects/notmuch-python/en/latest/database.html?highlight=filename#notmuch.Database.find_message_by_filename

Работающий один лайнер bash

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()
0
18.03.2021, 23:10

Я не нашел способа поиска в базе данных notmuch на основе имени файла maildir в NOTMUCH -SEARCH -TERMS (7)

Вы можете получить идентификатор сообщения -и идентификатор небольшого потока непосредственно из вашего поиска, перебирая идентификаторы сообщения -:

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
…

Если вы хотите получить From , Date , Subject заголовки, вы также можете извлечь его непосредственно из небольшой базы данных с помощью jq без необходимости анализировать файл maildir с помощью formail (1)или аналогичный инструмент.

notmuch search --format=json id:MESSAGE_ID | jq -r '.[].subject'
0
18.03.2021, 23:10

Теги

Похожие вопросы