批量删除某分类下的所有主题

: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

其他信息

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

22 个赞