Назад | Перейти на главную страницу

получить список всех отправителей из каталога vmail

Я пытаюсь создать список рассылки. Я хотел бы получить адреса электронной почты из каталога входящих писем (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 }'

Это хорошо работает