在特定日期之前删除MediaWiki页面

时间:2012-01-12 17:37:37

标签: mediawiki

我有一个相当大的MediaWiki数据库,我想删除自某个日期以来尚未编辑过的所有页面。

有问题的维基包含了我们第一次创建维基时导入的维基百科,以及我们自己创建的大量页面。我们最近决定不再需要Wikipedia页面,因此希望将它们从数据库中删除。

我们可以想到的最好的方法是删除自原始导入以来尚未编辑的所有页面 - 问题是,我们不确定如何执行此操作。

有人有任何想法吗?

2 个答案:

答案 0 :(得分:2)

生成自初始设置(使用Wikipedia剪切)后创建的自己文章的列表可能更简单,导出这些文章,然后将它们重新导入到新初始化的MediaWiki数据库中。

答案 1 :(得分:2)

通过运行如下SQL查询,您可以获取在给定日期之前(或之后)编辑的页面列表:

SELECT page_id, page_namespace, page_title
FROM /*prefix*/page
WHERE page_touched < '20110101000000'

这列出了自2011年初以来尚未编辑的所有页面的ID,命名空间编号和标题。(时间戳格式为'YYYYMMDDHHMMSS'。)如果在安装MediaWiki时配置了表名前缀,你需要用它替换上面的/*prefix*/

此时,你可以做几件事:

  • 正如Joshua C. Lerner建议的那样,您可以export要保留的所有页面(使用Special:Exportmaintenance/dumpBackup.php)并将其重新导入新数据库。

  • 还有一个名为maintenance/deleteBatch.php的{​​{3}}可用于删除一堆网页,就像管理员以通常的方式删除它们一样。

    < / LI>
  • 最后,如果您确定不希望页面恢复,则可以使用DELETE替换上面SQL查询的第一行。我强烈建议您在执行此操作之前备份数据库。这将在数​​据库中留下一些孤立的修订版本,但您可以使用富有想象力的维护脚本maintenance/deleteOrphanedRevisions.php来删除它们。

(上面两种方法的一个小问题是导出和批量删除脚本都希望列出的页面带有命名空间 names ,而SQL查询返回命名空间 numbers 。通过搜索和替换将一个转换为另一个并不难,但它确实为该过程添加了一个额外的步骤。当然,如果要删除的所有页面都在主命名空间中,这不是一个问题:只需将AND page_namespace = 0添加到查询中,并从输出中删除ID和名称空间。)