Скажите Матту прикрепить файлы (перечислены в файле)

Делаю первые шаги с Mutt (с msmtp в Slackware 13.1).

Я уже могу отправлять почту с вложениями вот так:

cat mail.txt | mutt -a "/date.log" -a "/report.sh" -s "subject of message" -- [email protected]

Я хотел бы определить файлы, которые будут прикреплены в другом файле, а затем сказать Mutt, чтобы он прочитал его, что-то вроде этого:

mutt -? listoffilestoattach.txt

Является ли это возможным? Или есть похожие подходы?


person KcFnMi    schedule 18.11.2015    source источник


Ответы (1)


Вы можете довольно легко заполнить массив списком имен файлов, а затем использовать его в качестве аргумента для -a.

while IFS= read -r attachment; do
    attachments+=( "$attachment" )
done < listoffilestoattach.txt
for f in ../*.log; do
    attachments+=("$f")
done

mutt -s "subject of message" -a "${attachments[@]}" -- [email protected] < mail.txt

Если вы используете bash 4 или более позднюю версию, вы можете заменить цикл while на (немного) более интерактивную команду readarray:

readarray -t attachments < listoffilestoattach.txt

Если, как кажется, в случае mutt требуется один файл для каждой опции -a, вам понадобится что-то немного другое:

while IFS= read -r attachment; do
    attachments+=( -a "$attachment" )
done < listoffilestoattach.txt
for f in ../*.log; do
    attachments+=( -a "$f")
done

mutt -s "subject of message" "${attachments[@]}" -- [email protected] < mail.txt

Используя readarray, попробуйте

readarray -t attachments < listoffilestoattach.txt
attachments+=( ../*.log )
for a in "${attachements[@]}"; do
    attach_args+=(-a "$a")
done
mutt -s "subject of message" "${attach_args[@]}" -- [email protected] < mail.txt
person chepner    schedule 18.11.2015
comment
Как поместить ls ../*.log во вложения? - person KcFnMi; 18.11.2015
comment
Не работает @chepner. Добавляется только один файл, а остальные файлы каким-то образом отправляются в качестве адресата электронной почты. - person KcFnMi; 18.11.2015
comment
Я вижу противоречивые справочные страницы о том, может ли -a принимать несколько аргументов или нет. Попробуйте attachments+=(-a "$attachment") и удалите -a из командной строки mutt. (mutt.org/doc/man_page.html указывает только один файл, так что, вероятно, окончательный.) - person chepner; 18.11.2015
comment
Таким образом, он правильно отправляется в пункт назначения (файлы не добавляются в качестве пункта назначения). Но добавлен только один файл. Я делаю так: вложение+=(../*.log) вложения+=(-a $вложение), это правильно? - person KcFnMi; 18.11.2015