Uma ligeira modificação da grande resposta fornecida por Tgr: por alguma razão, o MySQL no nosso servidor MediaWiki (e seu clone para ser apagado) recusou as construções CASE...WHEN...THEN
, então eu fiz as substituições equivalentes no shell:
:; mysql my_wiki -s -N -e \
"SELECT CONCAT(page_namespace, ':', page_title) FROM page;" | \
sed -e 's,^0:,:,' -e 's,^1:,Talk:,' \
-e 's,^2:,User:,' -e 's,^3:,User talk:,' \
-e 's,^6:,File:,' -e 's,^7:,File talk:,' \
-e 's,^[0-9][0-9]*:.*$,,' \
| egrep -v '^$' > /DUMP/wikipage-list-utf8.txt
Se você precisar revisar a listagem e seu terminal não for UTF-8 (como o meu não foi), você pode iconv
do arquivo de texto para a codificação do terminal, por exemplo:
:; iconv -f utf8 -t cp1251 < /DUMP/wikipage-list-utf8.txt
Além disso, pelo que vale a pena, os namespaces definidos nessa instalação específica da Wikimedia (de acordo com a consulta api.php) foram:
<ns id="-2" case="first-letter" canonical="Media" xml:space="preserve">Медиа</ns>
<ns id="-1" case="first-letter" canonical="Special" xml:space="preserve">Служебная</ns>
<ns id="0" case="first-letter" content="" xml:space="preserve" />
<ns id="1" case="first-letter" subpages="" canonical="Talk" xml:space="preserve">Обсуждение</ns>
<ns id="2" case="first-letter" subpages="" canonical="User" xml:space="preserve">Участник</ns>
<ns id="3" case="first-letter" subpages="" canonical="User talk" xml:space="preserve">Обсуждение участника</ns>
<ns id="4" case="first-letter" subpages="" canonical="Project" xml:space="preserve">Simsla</ns>
<ns id="5" case="first-letter" subpages="" canonical="Project talk" xml:space="preserve">Обсуждение Simsla</ns>
<ns id="6" case="first-letter" canonical="File" xml:space="preserve">Файл</ns>
<ns id="7" case="first-letter" subpages="" canonical="File talk" xml:space="preserve">Обсуждение файла</ns>
<ns id="8" case="first-letter" subpages="" canonical="MediaWiki" xml:space="preserve">MediaWiki</ns>
<ns id="9" case="first-letter" subpages="" canonical="MediaWiki talk" xml:space="preserve">Обсуждение MediaWiki</ns>
<ns id="10" case="first-letter" canonical="Template" xml:space="preserve">Шаблон</ns>
<ns id="11" case="first-letter" subpages="" canonical="Template talk" xml:space="preserve">Обсуждение шаблона</ns>
<ns id="12" case="first-letter" subpages="" canonical="Help" xml:space="preserve">Справка</ns>
<ns id="13" case="first-letter" subpages="" canonical="Help talk" xml:space="preserve">Обсуждение справки</ns>
<ns id="14" case="first-letter" canonical="Category" xml:space="preserve">Категория</ns>
<ns id="15" case="first-letter" subpages="" canonical="Category talk" xml:space="preserve">Обсуждение категории</ns>
Lamentamos que as tags estejam localizadas, mas os nomes "canônicos" são o que procuramos e são descritivos o suficiente.
Além dos itens que eu havia convertido com sed
acima, havia também entradas nos namespaces 8, 10 e 12 que pareciam mais "dados do sistema" em vez de conteúdo do usuário, e a intenção era reutilizar a configuração da instalação existente somente sem o conteúdo - então eu não os transmita para o script de exclusão, como em:
:; php deleteBatch.php /DUMP/wikipage-list-utf8.txt
Obrigado ao Tgr pelo excelente e vinculado post - foi tudo que eu precisava para começar:)
No que diz respeito às ferramentas fornecidas com o MediaWiki, essa era a exclusão "adequada" do conteúdo, a realocação no banco de dados para que ele pudesse ser recuperado. Para limpeza real, isso deve ser limpo no nível do banco de dados. No nosso caso, não nos importamos muito com o conteúdo (nós nos preocupamos que ele deveria ser removido do clone, apenas a configuração era necessária para criar um novo site wiki), então abaixo está mais ou menos o que eu fiz, de acordo com o log de histórico do MySQL ( Eu revisei o dump SQL do banco de dados para ver quais tabelas tinham mais tamanho e conteúdo, e não pareciam conter dados do sistema como trechos de texto de ajuda ou localização):
DELETE FROM text WHERE old_id IN (SELECT ar_text_id FROM archive);
DELETE FROM files WHERE old_id IN (SELECT fa_id FROM filearchive);
delete from logging;
delete from archive;
delete from filearchive;
delete from recentchanges;
delete from searchindex;
delete from uploadstash;
delete from watchlist;
delete from ipblocks;
delete from objectcache;
update user set user_password = 'cV%@4dF.' where user_id not in (1,2,3);
Eu também limpei os arquivos anexados com:
:; rm -f 'find mediawiki/images -type f'
Claro, não copie cegamente meus exemplos, a menos que você pretenda apagar todo o conteúdo e não apenas alguns subconjuntos, e mesmo assim fazer um backup do banco de dados e do diretório antes de fazer algo irreversível;)