【问题标题】:Remove MediaWiki Pages Before a Certain Date在特定日期之前删除 MediaWiki 页面
【发布时间】:2012-01-14 07:15:48
【问题描述】:

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

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

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

有人有什么想法吗?

【问题讨论】:

    标签: mediawiki


    【解决方案1】:

    您可以通过运行如下 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.phpmaintenance script 可用于删除一堆页面,就好像它们已被管理员以通常的方式删除一样。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 2021-11-21
        • 1970-01-01
        相关资源
        最近更新 更多