MediaWiki 群发页面重命名
MediaWiki mass page rename
我需要重命名 MediaWiki 中匹配特定模式的所有页面。对于包含 XXXXX 的任何页面,必须将其重命名为 YYYYY。这包括页面内容和页面名称。例如,wiki URL http://wiki.example.org/TfrmXXX_Rates should be renamed to http://wiki.example.org/TfrmYYY_Rates,任何包含 XXXXX 的文本都应替换为 YYYYY。
Replace Text extension不能用于此,因为它只能修改页面内容。我还需要重命名页面以及对它们的所有引用(包括 interwiki 链接)。
我尝试过的是:转储 MySQL 数据库,将所有出现的 XXXX 替换为 YYYY,然后使用修改后的 SQL 脚本删除并重新创建 wiki 数据库,最后 运行 maintenance/rebuildall.php 脚本(由 MediaWiki 提供).
问题是它不起作用。当我搜索关键字时,MediaWiki 会显示一些具有相关页面内容的匹配项。但是当我打开 URL 时,它显示 "no content yet"。我怀疑这样做的原因是某些数据以 PHP 序列化形式存储,并且无法用文本 search/replace.
轻松替换
所以问题是:如何重命名 MediaWiki 数据库中的所有引用,包括内容和页面名称?
Mediawiki 附带了一个 maintenance script 来重命名页面和指向它们的任何链接。您可以 运行 来自 MySQL 的查询来填充名为 /tmp/names.txt
:
的文件
SELECT CONCAT(page_title, '|', REPLACE(page_title, 'XXXXX', 'YYYYY')) INTO OUTFILE '/tmp/names.txt' FROM page WHERE page_title LIKE '%XXXXX%';
这会给你这个文件:
TfrmXXX_Rates|TfrmYYY_Rates
TfrmXXX_Other|TformYYY_Other
...
那么你应该可以运行这个命令:
php /path/to/mediawiki/maintenance/moveBatch.php --noredirects /tmp/names.txt
Replace Text extension 应该适用于文本中不是链接的任何其他引用。
我可以完成任务。以下是步骤:
- 备份你的数据库
- 执行此操作以导出所有页面名称:
select page_title 从页面进入输出文件“/tmp/pagenames.txt”;
- 我用一个程序替换了所有需要替换的出现,并构建了另一个格式为
的文本文件
oldXXXname|newXXXname
如果您只需要替换一个单词,miken 的解决方案同样不错。如果需要替换XXX_1 XXX_2 XXX等互为前缀的词,那么就需要为此写一个程序,注意select替换的顺序,这样就不会'互相冲突。
然后运行
php mediawiki/maintenance/moveBatch.php --noredirects /tmp/constructed.txt
然后使用这种SQL替换所有其他文本引用:
使用wiki_db;
开始;
更新文本集 old_text =
替换(替换(....替换(
转换(old_text 使用 utf8
), 'XXX_1', 'YYYY'
), 'XXX_2', 'YYYY'
), 'XXX_3', 'YYYY'
...
), 'XXXX_2', 'YYYY_or_whatever'
);
最后,运行
php mediawiki/maintenance/rebuildall.php
我没有接受miken的回答,只是因为它只是解决了一半。
我需要重命名 MediaWiki 中匹配特定模式的所有页面。对于包含 XXXXX 的任何页面,必须将其重命名为 YYYYY。这包括页面内容和页面名称。例如,wiki URL http://wiki.example.org/TfrmXXX_Rates should be renamed to http://wiki.example.org/TfrmYYY_Rates,任何包含 XXXXX 的文本都应替换为 YYYYY。
Replace Text extension不能用于此,因为它只能修改页面内容。我还需要重命名页面以及对它们的所有引用(包括 interwiki 链接)。
我尝试过的是:转储 MySQL 数据库,将所有出现的 XXXX 替换为 YYYY,然后使用修改后的 SQL 脚本删除并重新创建 wiki 数据库,最后 运行 maintenance/rebuildall.php 脚本(由 MediaWiki 提供).
问题是它不起作用。当我搜索关键字时,MediaWiki 会显示一些具有相关页面内容的匹配项。但是当我打开 URL 时,它显示 "no content yet"。我怀疑这样做的原因是某些数据以 PHP 序列化形式存储,并且无法用文本 search/replace.
轻松替换所以问题是:如何重命名 MediaWiki 数据库中的所有引用,包括内容和页面名称?
Mediawiki 附带了一个 maintenance script 来重命名页面和指向它们的任何链接。您可以 运行 来自 MySQL 的查询来填充名为 /tmp/names.txt
:
SELECT CONCAT(page_title, '|', REPLACE(page_title, 'XXXXX', 'YYYYY')) INTO OUTFILE '/tmp/names.txt' FROM page WHERE page_title LIKE '%XXXXX%';
这会给你这个文件:
TfrmXXX_Rates|TfrmYYY_Rates
TfrmXXX_Other|TformYYY_Other
...
那么你应该可以运行这个命令:
php /path/to/mediawiki/maintenance/moveBatch.php --noredirects /tmp/names.txt
Replace Text extension 应该适用于文本中不是链接的任何其他引用。
我可以完成任务。以下是步骤:
- 备份你的数据库
- 执行此操作以导出所有页面名称:
select page_title 从页面进入输出文件“/tmp/pagenames.txt”;
- 我用一个程序替换了所有需要替换的出现,并构建了另一个格式为 的文本文件
oldXXXname|newXXXname
如果您只需要替换一个单词,miken 的解决方案同样不错。如果需要替换XXX_1 XXX_2 XXX等互为前缀的词,那么就需要为此写一个程序,注意select替换的顺序,这样就不会'互相冲突。
然后运行
php mediawiki/maintenance/moveBatch.php --noredirects /tmp/constructed.txt
然后使用这种SQL替换所有其他文本引用:
使用wiki_db; 开始; 更新文本集 old_text = 替换(替换(....替换( 转换(old_text 使用 utf8 ), 'XXX_1', 'YYYY' ), 'XXX_2', 'YYYY' ), 'XXX_3', 'YYYY' ... ), 'XXXX_2', 'YYYY_or_whatever' );
最后,运行
php mediawiki/maintenance/rebuildall.php
我没有接受miken的回答,只是因为它只是解决了一半。