За долгие годы использования почтового клиента у меня накопилось большое количество фильтров в Thunderbird которые автоматически обрабатывают почту раскладывая её по каталогам, сохраняя файлы, формируя автоответы и т д. Фильтры в Thunderbird привязываются к конкретным папкам, что лично для меня создаёт неудобства с управлением. Например письмо от Васи Пупкина я хочу положить в папку Васи Пупкина независимо на какой из моих емейлов оно пришло. Поэтому я сделал один общий файл фильтров которые привязал ко всем папкам симлинками. А для того чтобы объединить их написал пару скриптов которые облегчили обработку суммарно нескольких мегабайт фильтров.
Прежде всего нужно закрыть Thunderbird.
На первом шаге получаем все фильтры которые у нас есть в один каталог и нумеруем их. Этот однострочный скрипт запускается из каталога выбранного профиля Thunderbird.
$ i=0; find . -name msgFilterRules.dat -print0 | tr -s '\000' '\n' | while read file ; do cp "${file}" "${HOME}/Filters_Thunderbird/${file##*/}.${i}.txt" ; i=$((i+1)); done
А этот awk скрипт с именем aparse.awk разворачивает (транспонирует) фильтры так чтобы в одной строке был один фильтр. Он также активирует все фильтры.
# BEGIN { first=1 } { if ($0 ~ /^name=/) { if (first == 1) {printf "%s", $0; first=0} else {printf "\n%s", $0} } else if ($0 ~ /^enabled=/) { printf "\t%s", "enabled=\"yes\"" } else if ($0 ~ /^type=/) { printf "\t%s", $0 } else if ($0 ~ /^action=/) { printf "\t%s", $0 } else if ($0 ~ /^[ \t]*actionValue=/) { printf "\t%s", $0 } else if ($0 ~ /^[ \t]*customId=/) { printf "\t%s", $0 } else if ($0 ~ /^[ \t]*condition=/) { printf "\t%s", $0 } else if ($0 ~ /^[ \t]*version=/) { printf "%s\n", "1a-version=\"9\"" } else if ($0 ~ /^[ \t]*logging=/) { printf "%s\n", "1b-logging=\"yes\"" } else { printf "0a--%s\n", $0 } } END { printf "\n" }
Здесь я использую маркеры “1a-” и “1b-” чтобы две строки всплыли после сортировки в верх файла. Маркер “0a–” используется чтобы в файле увидеть ошибки необработанных опций которые после сортировки также всплывут.
Теперь все фильтры сортируем, убираем дубликаты и удаляем наши маркеры и получаем общий файл:
$ for file in `ls -1 *.txt` ; do cat "${file}" | awk -f aparse.awk ; done | sort | uniq | sed -e '/^$/d' -e 's/^1a-//g' -e 's/^1b-//g' > aa-transponde.txt
Пролистываем его и проверяем вручную на предмет ошибок.
Если всё в порядке то формируем результирующий суммарный список фильтров для Thunderbird:
$ for file in `ls -1 *.txt` ; do cat "${file}" | awk -f aparse.awk ; done | sort | uniq | sed -e '/^$/d' -e 's/^1a-//g' -e 's/^1b-//g' | tr '\t' '\n' > msgFilterRules-All.dat
Затем копируем его куда-то в профиль Thunderbird создав каталог Filters и во все каталоги где ходим видеть эти фильтры создаём относительные софтлинки. Относительные для того чтобы потом почтовый профиль можно было всегда легко перемещать.
Позаботьтесь о бэкапе старых фильтров, так как опция -s создаёт симлинк, а -f удаляет одноимённый файл если он там был.
ln -sf ../../Filters/msgFilterRules-All.dat msgFilterRules-All.dat
Готово. Теперь можно запустить Thunderbird и проверить все фильты. Помните что теперь фильтры находятся в одном файле и все изменения будут отражаться на всех папках Thunderbird где созданы симлинки на него.
Дополнено:
Добрый день!
Подскажите, пожалуйста, есть ли возможность переноса фильтров из Thunderbird на одной машине в установленный Thunderbird на другой?
Заранее благодарен!
Добрый день, Максим.
Да конечно, фильтры можно перенести.
Они находятся в каталоге профиля пользователя Thunderbird
Имя файла с фильтрами msgFilterRules.dat. Это текстовый файл который можно скопировать. Но копировать нужно на остановленном Thunderbird. Чтобы работающий TB не перезаписал его.
В Linux для pop3 должно быть где-то здесь:
/home/домашний каталог/.thunderbird/каталог профиля/Mail/каталог почтового аккаунта/msgFilterRules.dat
Например так:
/home/maxx_d/.thunderbird/wjqws89y.default/Mail/pop.mail.ru/msgFilterRules.dat
В Windows для pop3 файл находится в каталоге пользователя.
“C:\Users\maxx_d\Application Data\Thunderbird\Profiles\wjqws89y.default\Mail\pop.mail.ru\msgFilterRules.dat”
В виндах до Vista каталога Users нет, а есть “My Documents”
Причём файлы совместимы Linux< ->Windows только нужно концы строк заменить правильно.
Я перносил свои фильтры с Windows на Linux.
Переносить можно не только фильтры но и профиль целиком.
Удачи!