回答:
あなたは使用することができますビューは、Operationsバルク、ノード、ユーザ、コメントの一括操作を実行することを可能にするモジュールと、また、バッチAPIを使用して、選択した操作をすべてのノード、ユーザー、またはコメントに適用することもできます。バッチAPIを使用すると、フォーム処理を複数のページリクエストに分散できるため、PHPタイムアウトが原因で処理が中断されないようにすると同時に、ユーザーは進行中の操作の進行状況に関するフィードバックを受け取ることができます。
ノードを殺すこの方法は非常に遅いですが、最も安全です
function MYMODULE_menu(){
$items['admin/mymodule/killnodes/%'] = array(
'title' => 'Kill nodes',
'page callback' => 'kill_nodes',
'page arguments' => array(3),
'type' => MENU_CALLBACK,
'access arguments' => array('administer site configuration'),
);
return $items;
}
function kill_nodes($type){
$query = "SELECT node.nid AS nid FROM {node} node WHERE node.type IN ('%s')";
$result = db_query($query, $type);
$count = 0;
while($row = db_fetch_object($result)){
node_delete($row->nid);
$count++;
}
$message = t('!count nodes has been killed. Pif-Paf!', array('!count' => $count));
drupal_set_message($message);
return t("That's all folks");
}
ユーザーの場合、削除するユーザーをプログラムで決定できますか?可能であれば、前の関数を例として使用して、不要なユーザーを削除できます。
私のように、Pythonのアプローチを好む場合(たぶんここではまれですが、それでも)、これはこの問題を解決する透過的で効果的な方法です。
import os
# Build up a variable containing the usernames
# This list was built using drush sql-cli, then
# SELECT name FROM users
# where $your-where-condition
# order by uid asc
# INTO
# OUTFILE '/tmp/users.csv'
# FIELDS TERMINATED BY ','
# ENCLOSED BY '"'
# lines terminated by ', ' ;
users = [result from SQL goes here]
for user in users:
print("Deleting spam user: %s..." % user),
os.system('drush --yes -r $your-path-to-drupal -l $your-site-url user-cancel --delete-content %s > /dev/null' % user)
print 'Done'
手順は基本的に次のとおりです。
drush sql-cli -r $your-path-to-drupal -l $your-site-url
python delete-users.py
これを行うにはもっと良い方法があると確信していますが、これはうまく機能する私のハッキングされたソリューションです。
for i in `drush sql-query 'SELECT list of usernames'`; do drush --yes user-cancel --delete-content $i; done
。
D6用に次の2つのモジュールを試してください。
ユーザープルーン https://drupal.org/project/user_prune およびユーザー削除 https://drupal.org/project/user_delete
User Pruneを使用すると、指定した基準に基づいて非アクティブなユーザーを一括削除できます。
ユーザーの削除により、ユーザーを削除し、ノードやコメントを含むすべての送信済みコンテンツを削除できます
私はすべてのユーザーを削除するためのカスタムモジュール7を実装しました。管理者/人の領域には、この操作を完了するための新しいフォームがあります。
しつこすぎる。
サンドボックスプロジェクトです。よし
Drushにアクセスでき、ユーザーをホワイトリストに保持して、追加のモジュールをインストールする必要がない簡単なソリューションが必要な場合:
drush @example.org sqlq "SELECT name FROM users WHERE name NOT IN ('keepthisuser1', 'andthisuser2')" | while read NAME; do
drush -y @example.org user-cancel $NAME ;
done
コピー貼り付けの前に、@example.org
とユーザーのリストの両方を調整('keepthisuser1', 'andthisuser2')
して、上記を維持するようにしてください:)
select all
すべてのページですべてのアイテムを選択するボタンを有効にする設定があります。クリックして、Kill-em-all!