Я пытаюсь создать список рассылки. Я хотел бы получить адреса электронной почты из каталога входящих писем (vmail /..../ cur). Пользуюсь голубятней, но думаю, не беда. Есть ли способ получить весь список отправителей из каталога / cur с ~ 30000 электронными письмами в нем?
Я пытался:
cat 1325153222.M840289P9721V0000000000000901I034001E2_2\,S\=2892\:2\, | grep 'From:' | awk '{ print $3 }'
Вывод: <info@domain.eu>
Было бы хорошо, если бы он работал для всего каталога, а не только для одного файла.
Слишком длинный комментарий к ваш ответ но есть некоторые предположения, которые вы делаете в своей стратегии
find . -type f -exec cat {} + | grep 'From:' | awk '{ print $3 }'
к которому я хотел бы обратиться.
В From:
заголовок обычно имеет форму
From: Sender Name or Description <author@example.com>
где последний (и не обязательно третий) - это адрес электронной почты, заключенный в < >
. Что означает, что | awk '{ print $3 }'
не всегда может распечатать адрес электронной почты.
Параметр NF в awk содержит количество полей и с помощью | awk '{ print $NF }'
вы всегда получите awk для печати последнего поля / столбца в строке.
Касаемо подкоманды grep 'From:'
:
Я бы рекомендовал сопоставить только первое вхождение строки, начинается с участием From:
с регулярным выражением, так как это будет строка заголовка, а любые дополнительные вхождения строки «От:» могут исходить из тела сообщения. Вы также можете остановиться после первого матча с помощью -m
, что будет немного быстрее для больших сообщений. Поэтому постарайтесь grep -m 1 -e "^From:\ "
С точки зрения стиля вы всегда можете заменить cat FILENAME | grep STRING
с участием grep STRING FILENAME
и просто используйте -r
переключитесь в grep для рекурсивного анализа всех файлов в вашем Maildir.
grep -r -e "^From:\ " -m 1 . |awk '{print $NF}'
find . -type f -exec cat {} + | grep 'From:' | awk '{ print $3 }'
Это хорошо работает