在账户之间迁移 Thunderbird 3 已保存的搜索

在账户之间迁移 Thunderbird 3 已保存的搜索

长话短说,系统管理员将我转移到了新的邮件服务器。在此过程中,他们需要在 Thunderbird 中创建一个单独的帐户并禁用我的旧帐户。他们负责所有邮件迁移。

但是,我的已保存搜索文件夹却没有随波逐流。我有超过 20 个复杂的搜索,我不想手动重新输入。您无法像其他文件夹一样在帐户之间拖动已保存的搜索。

我尝试关闭 Thunderbird,在 Thunderbird 配置文件文件夹中的 virtualFolders.dat 中执行查找/替换,保存该文件,然后重新打开 Thunderbird,但似乎没有任何效果。我假设搜索文件夹也保存在其中一个 sqlite 数据库中...有人知道在哪里查找吗?

答案1

几点说明:

  • Thunderbird 显然不会删除磁盘上的已保存搜索,即使在 UI 中删除它们,因此旧服务器的 IMAP 文件夹中充满了我不再使用的旧 .msf 搜索(所以我借此机会不迁移它们)
  • 在某个时候,Thunderbird 将其文件命名约定从“Foo%20Bar.msf”更改为“Foo Bar.msf”,因此每次迁移时我都会有一些重复的文件(一个是过期的)(可能是 Thunderbird 2.x -> 3.x?)
  • 就我而言,我将保存的搜索放在顶级视图中,而不是在收件箱下,因此它们出现在 ImapMail/server/saved-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 只是必要的,因为我将我的已保存搜索与其他非虚拟文件夹一起组织在顶层。

我意识到可能有无数种方法可以完成多文件查找/替换和复制,但我更喜欢这种方法,因为它可以处理文件名的转义,而且我可以检查命令通过管道耦合的每个点上匹配的内容。

你必须更换旧服务器新闻服务器调用中的路径参数sed以及输入和输出路径中的路径参数。请注意,Perl 正则表达式有效地执行了基本名称。

我非常希望将来能有一种 UI 方式来实现这一点。不过我意识到这是一个特殊情况(与单个帐户关联的已保存搜索通过主机名移动到具有相同文件夹结构的其他帐户)...

答案2

在使用无意义的名称(即不太可能出现在我的邮件中的内容)创建已保存的搜索后,我在我的个人资料目录中发现了以下对它的引用:

  • virtualFolders.dat(您找到的)
  • panacea.dat(邮件文件夹的缓存文件
  • ImapMail/server.host.name/INBOX.sbd/已保存搜索的名称.msf

根据幻影文件夹mozillaZine 文章说,panacea.dat 可以安全删除,并且会自动重新创建。

此外,根据该页面,您保存的搜索似乎需要 .msf 文件。尝试从您的旧配置文件中复制该文件,这样就应该一切就绪了。

相关内容