Po përpiqem të ndërtoj një listë të postës elektronike. Unë do të doja të merrja adresat e postës elektronike nga një postë elektronike që nuk inkurajon postat (vmail /..../ cur). Unë përdor pëllumb, por mendoj se nuk ka rëndësi. A ka ndonjë mënyrë për të marrë të gjithë listën e dërguesit nga një direktori / cur me email 30000 ~ në të?
Unë kam provuar:
cat 1325153222.M840289P9721V0000000000000901I034001E2_2\,S\=2892\:2\, | grep 'From:' | awk '{ print $3 }'
Dalja: (e fshehur) do të ishte mirë nëse do të funksiononte në një direktori të tërë jo vetëm një skedar.
Слишком длинный комментарий к вашему ответу , но есть некоторые предположения, которые вы делаете в своей стратегии
find . -type f -exec cat {} + | grep 'From:' | awk '{ print $3 }'
, которые я хотел бы рассмотреть.
Заголовок От:
обычно имеет форму
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}'