批量删除分类中的所有主题

:bookmark: 本指南提供有关如何在自托管 Discourse 实例中批量删除类别内所有主题的说明。

:person_raising_hand: 所需用户级别:系统管理员

:warning: 需要 SSH 访问您的服务器

出于各种原因(例如重新组织内容或清除过时的讨论),可能需要删除类别中的所有主题。本指南将引导您完成在自托管 Discourse 服务器上安全完成此任务的步骤。

:warning: 这是一个破坏性操作。在继续之前,请确保备份您的论坛

删除类别中主题的步骤

  1. 确定类别 slug:这是类别 URL 中使用的名称。
  2. 访问您的服务器:使用 SSH 登录到您的服务器。
ssh username@your-server.com
  1. 导航到 Discourse 目录
cd /var/discourse
  1. 进入 Discourse 应用程序
./launcher enter app
  1. 执行删除命令:将 \"mycategory\" 替换为您的类别 slug。
rake destroy:topics[\"mycategory\"]

:information_source: 此过程可能需要一些时间,具体取决于主题的数量。

删除子类别中的主题

要删除子类别中的主题,请在命令中包含父类别的 slug。例如:

rake destroy:topics[\"childcategory\",\"parentcategory\"]

删除所有类别中的所有主题

:warning: 此操作将清除所有类别中的所有主题!

rake destroy:topics_all_categories

常见问题

Discourse 保留已删除的主题多长时间?我仍然可以通过直接链接访问主题。

删除后,主题仍保留在数据库中。只有工作人员仍然能够看到已删除的主题。

如何从数据库中永久删除主题?

您可以使用 destroy:posts rake 任务从数据库中永久删除帖子(及其主题)。这需要首先启用隐藏的 can_permanently_delete 站点设置。将帖子 ID 作为逗号分隔的列表传入:

rake destroy:posts[4,8,15,16,23,42]

您也可以从文件中导入帖子 ID:

cat post_ids.txt | rake destroy:posts

是否可以将主题删除限制在一段时间内(两个日期之间)?

您需要通过 Rails 控制台来完成此操作,以下命令应该有效:

 Topic.where(\"created_at.....\").each do |t|
   first_post = t.ordered_posts.first
   PostDestroyer.new(Discourse.system_user, first_post).destroy if first_post
 end

如何查找类别的 slug 或 ID?

destroy:topics 任务使用类别 slug(类别 URL 中的名称)。您可以通过运行以下命令来列出所有类别及其 ID 和 slug:

rake categories:list

附加信息

有关其他管理操作的更多信息,请参阅:

21 个赞