Несколько заметок:
- Thunderbird, очевидно, не удаляет сохраненные поиски на диске даже после удаления их в пользовательском интерфейсе, поэтому в папке IMAP для старого сервера было полно старых MSF-файлов для поисков, которые я больше не использовал (поэтому я воспользовался этой возможностью, чтобы не мигрировать те)
- В какой-то момент Thunderbird изменил соглашение об именах файлов с «Foo% 20Bar.msf» на «Foo Bar.msf», поэтому у меня было несколько дубликатов (один устаревший) с момента, когда произошла миграция (вероятно, Thunderbird 2.x -> 3). .Икс?)
- В моем случае сохраненные поиски хранятся в представлении верхнего уровня, а не в папке "Входящие", поэтому они отображаются в ImapMail/server/save-search.msf.
- Сохраненные файлы поиска невелики, но содержат ссылки на старое имя хоста, которое мне нужно найти / заменить
- После переноса MSF-файлов, проверки их в Thunderbird и выхода из него файл virtualFolders.dat был обновлен (что объясняет, почему редактирование этого файла ничего не сделало и просто было перезаписано).
Вот команда, которую я запустил, когда Thunderbird не запущен, чтобы перенести сохраненный поиск .msfs. Извиняюсь за плохую упаковку:
find ImapMail/oldserver/*.msf -size -5k -and -not -name "*%20*" -and -not -name "Trash.msf" -print0 | xargs -0 perl -e 'foreach $path (@ARGV) { $path =~ /.*\/([^\/]+)/; $filename = $1; print "sed 's/oldserver/newserver/g' \"$path\" > \"ImapMail/newserver/$filename\"\n"; }' | sh
Обратите внимание, что аргументы для find
наиболее вероятны в вашей ситуации; У меня было несколько фильтров для удаления неиспользуемых, но не совсем удаленных старых сохраненных поисков; фильтр по размеру и игнорирование Trash.msf необходим только потому, что я сохраняю поиски на верхнем уровне с другими не виртуальными папками.
Я понимаю, что, вероятно, есть несколько способов сделать это многофайловое обнаружение / замена и копирование, но этот метод - мое предпочтение, так как он обрабатывает экранирование имен файлов, и я могу проверить, что сопоставляется в каждой точке, где команды соединены конвейером ,
Вам придется заменить аргументы пути oldserver и newserver в вызове sed
а также в путях ввода и вывода. Обратите внимание на регулярное выражение Perl, которое эффективно делает базовое имя.
Я очень надеюсь, что когда-нибудь появится способ сделать это с помощью пользовательского интерфейса. Я понимаю, что это особый случай (сохраненные поиски, связанные с перемещением одной учетной записи в другую учетную запись по имени хоста с идентичной структурой папок), хотя ...