Принятый ответ не сработает, если нужно скопировать чужой открытый ключ на несколько машин. Итак, я придумал следующее решение:
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, вероятно, присутствует.
В конце концов я нашел путь через немногочисленные привязки 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()
Я не нашел способа поиска в базе данных 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'