У меня есть почтовый сервер Kerio Connect, который сохраняет все свои электронные письма в относительно стандартной структуре папок спула почты в виде необработанных файлов .eml. Мне было поручено выполнить поиск по ключевым словам в некоторых почтовых ящиках пользователей по ключевым словам и адресам электронной почты. Затем мне нужно скопировать найденные файлы в другую папку.
Структура папок будет примерно такой:
mail
example.com
user1
INBOX
Sent Items
etc
user2
INBOX
etc
Сложность возникает из-за того, что электронные письма, как файлы .eml, именуются в каждой папке с серийным номером, поэтому, если я нахожу электронное письмо в почтовом ящике пользователя user1 с именем 00000123.eml, а другое электронное письмо в их отправленных с тем же именем имеет одно из ключевые слова в нем, я не хочу, чтобы одно копировалось поверх другого.
Мне также нужно выполнить некоторые поиски по ключевым словам с нечувствительностью к регистру, чтобы я мог искать «ключевое слово» и совпадать с ключевым словом и ключевым словом и ключевым словом KEYWORD.
Я думаю, что следующая команда сделает то, что я хочу, но я не уверен на 100%, и я использую это более ~ 100 ГБ файлов eml, поэтому я хочу убедиться, что все правильно, прежде чем оставлять его для запуска .
grep -i -r -l -e "user1@example.com|anotheruser@example.com|keyword1|anotherkeyword|evenmore" /usr/local/kerio/mailserver/store/mail/example.com/user1/ | xargs -I{} rsync -Rv {} /Volumes/Data/Email\ Discovery/201706/user1/
По моим подсчетам, это будет выполнять поиск без учета регистра (-i) рекурсивно (-r), печатать только имена файлов (-l) и использовать регулярное выражение (-e), а затем передавать результаты в rsync, который рекурсивно копирует их в папку назначения и (надеюсь) сохранить ту же структуру папок.
Есть ли более эффективный способ сделать это?