mutt :определить локальный путь к текущей почте

Сценарии:

  1. Каталог aсуществует, но bнет`:

    cp -a "$HOME"/a "$HOME"/b
    

    скопирует весь каталог aв новый каталогb

  2. Каталоги aи bсуществуют:

    cp -a "$HOME"/a "$HOME"/b
    

    скопирует каталогaв каталог b. В результате вы получите каталог "$HOME"/b/a.

  3. Каталоги aи bсуществуют:

    cp -a "$HOME"/a/* "$HOME"/b
    

    скопирует содержимое изaв каталог b, но исключит скрытые файлы и каталоги. Хотя у некоторых оболочек есть несколько опций для их включения, здесь лучшим подходом будет:

    cp -a ~/a/. ~/b/
    

Как я понимаю, вы этого и хотите.

1
27.09.2021, 12:58
1 ответ

Решил составить ответ, т. к. он становится достаточно большим, чтобы решать его в обсуждении в комментариях под вопросом.

Я понимаю, что проект различается для разных отправителей, тем или содержания письма.

Вам потребуются два макроса, как здесь Команда запуска Neomutt для прикрепления файла к клавише макроса

Первый макрос выполняет свою работу и должен находиться в отдельном файле -, поскольку часть оболочки расширена на определение макросов. Вот почему Вам нужно переопределить его вторым макросом, который определяет первый и выполняет его.

~/.mutt/dynamic _макрос

"<pipe-message>/path/to/your/script<enter>\
<save-message>`cat /tmp/mutt_project`<enter>" \
"pipe message to extract attachments and save message"

~/.mutt/muttrc

macro index,S \
"<enter-command>source ~/.mutt/dynamic_macro<enter>\
<enter-command>push,s<enter>" \
"redefine macro and run it"

Теперь вот неработающий пример /path/to/your/scriptв псевдокоде (bash вроде ). Сценарий читает сообщение со стандартного ввода, анализирует заголовки или тело, чтобы определить проект имя (имя почтового ящика )и перебирает части, чтобы сохранить вложения -, возможно, в какой-то каталог и подкаталоги по проектам. ?

detect_project(){
  # parse $content to detect project from body/headers
  # save the project name to /tmp/mutt_project for the 1st macro
  # and output on stdout for save_attachemnts()
  echo $result > /tmp/mutt_project
  echo $result
}

save_attachments(){
  # parse $content, iterate over parts of message from $content,
  # extract attachments, decode, save to:
  #/root_directory_with_attachments/$project/$your_filename
}

main(){
  content=$(cat) # read the stdin and save it into variable
  project=$(detect_project)
  save_attachments
}

main

Предложения:

  1. использовать язык с библиотекой для работы с электронными письмами, которые могут получить доступ к частям, расшифровать их и т. д.
  2. Я убежден, что приведенный выше пример не будет работать с префиксом тега -, если вы будете помечать несколько сообщений из разных проектов. Причина в том, что макрос выполняется один раз, и все сообщения будут переданы в /path/to/your/script сразу, но аргумент <save-message>будет содержать проект, обнаруженный из последнего сообщения

Различные решения :переходят от mutt к neomut и от mu к notmuch. Neomutt имеет хорошую сборку -для поддержки notmuch. Все здесь можно было бы сделать немного пост -новый хук. Он идеально подходит для вашего случая использования, работает в фоновом режиме без каких-либо макросов neomutt и устраняет ограничение префикса тега -оригинального решения. Nomtuch post -новый хук запускается каждый раз после того, как вы синхронизируете свои сообщения.

  • он может помечать сообщения на основе содержания заголовков from/to/cc/subject или других тегов,
  • сохранение вложения также возможно по почте -новый хук.

Если Вас это интересует, оставьте здесь комментарий, и я расширю ответ.

0
25.10.2021, 14:30

Теги

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