你在这里

紧急批量删除节点

24
Vote up!

批量删除节点当然,核心自带的管理界面可以做到,如果是大批量的删除,我们需要借助VBO模块。但如果要删除的节点要满足一个比较复杂的条件,VBO也很难解决。

我们遇到的情况是突发的,有人恶意在网站灌水,而我们线上是没有安装VBO模块的,我需要过滤某个人发布过的所有节点,并将其删掉。当然基本的操作还是要做的,比如ban掉这个恶意用户,封IP,暂时不让任何用户直接发表,都进入待审核状态。

当时我们想到的办法是通过shell脚本运行drush脚本来删除。

相信我,你会用到这样的脚本的。
BASH:
webroot="DRUPAL_PATH"
cd $webroot

mysql_conn="`drush -r $webroot sql-connect` -BNe "
query="select nid from node where uid = 'BAD_UID'"

$mysql_conn "$query" | while read line; do drush -r $webroot ev "node_delete($line);" --user=1;  done
Drush还有另一种更简洁的方式
BASH:
webroot="DRUPAL_PATH"
cd $webroot

query="select nid from node where uid = 'BAD_UID'"

for nid in `drush sql-query "$query" --extra=--skip-column-names`;
do drush -r $webroot ev "node_delete($nid);" --user=1; done