Drushでノードまたはノードのリストを削除するにはどうすればよいですか?


8

特定のコンテンツタイプのすべてのノードを削除する機能を提供する[すべて削除]モジュールを発見しました。ただし、このモジュールでは、単一のノードまたはノードのリストを削除することはできません。

Drushを使用して特定のコンテンツタイプのノードを削除できますか?」という質問で、コマンドに関する2つの回答が見つかりましたdrush node_delete <nid>が、このコマンドが見つかりません。

node_delete()に関する議論で、evalを使用してこのタスクを実行するコードが見つかりましたが、evalを使用しています。

drush php-eval "global \$user; \$user = user_load(1); node_delete(nid);"

これを達成するために実装された機能が存在しない場合、この機能を実装するためのより良い方法は何ですかDrushモジュールで、または新しいモジュールを作成しますか?

回答:


6

Drush Entityモジュールを使用している場合は、実行drush entity-delete node 123してサイトからnid 123を削除できます。

編集:誰かがdrush entity-deleteコマンドを使用する必要がある場合は、モジュールの開発バージョンを使用する必要があります:https : //www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


グレッグに感謝します。いつもドラッシの手伝いをしてくれます;-)
Adrian Cid Almaguer

ノードの削除を許可しないDrushエンティティモジュール内にバグを発見しました。後でパッチをコミットします。
Adrian Cid Almaguer


drush entity-deleteコマンドを使用する必要がある場合にこの時点でパッチを送信しました。Drushエンティティモジュールの開発
Adrian Cid Almaguer

7

最後に、自分のモジュールを drush_delete

内部drush_delete.drush.incファイルこのコードを置きます:

<?php
/**
 * @file
 * The Drush Delete drush commands.
 */

/**
* Implements hook_drush_command().
*/
function drush_delete_drush_command() {
  $items['node-delete'] = array(
    'description' => dt("Delete nodes."),
    'aliases' => array('nd'),
    'arguments' => array(
      'nids' => dt('The nids of the nodes to delete'),
    ),
    'examples' => array(
      'drush node-delete 1' => dt('Delete the node with nid = 1.'),
      'drush node-delete 1 2 3' => dt('Delete the nodes with nid = 1, 2 and 3.'),

    ),
  );
  return $items;
}

/**
 * Callback for the node-delete command
 */
function drush_drush_delete_node_delete() {
  $nids = func_get_args();
  $nids = array_filter($nids, 'is_numeric');
  $nids = array_map('intval', $nids);
  $nids = array_unique($nids);
  $nids = array_values($nids);
  $cant = count($nids);

  if ($cant > 0) {
    node_delete_multiple($nids);

    drush_print(dt("Deleted nodes:"));
    drush_print(implode(' ', $nids));
  }
  else {
    drush_set_error('DRUSH_ERROR_CODE', dt("You must enter at least one nid"));
  }
}

モジュールをインストールし、実行drush cc drushしてDrushキャッシュをクリアし、次のようなコマンドを使用します。

ノードを削除するには:

drush node-delete 1
drush nd 1

複数のノードを削除するには、以下を使用します。

drush node-delete 1 2 3
drush nd 1 2 3

このモジュールでコマンドを見つけることができます:

https://github.com/adrian-cid/drush_commands


6

私見最も簡単な方法は、php-evalを使用することです。

drush php-eval "node_delete_multiple(array(NODE_ID));"

...

drush php-eval "node_delete_multiple(array(34));"     // for node/34

drush php-eval "node_delete_multiple(array(34, 35));" // for node ids 34 and 35

ありがとう。でも、drushコマンドがあれば、必要になるかもしれない引数とオプションを追加できると思います。また、簡単な方法で検証を追加できます。
エイドリアンCid Almaguer

私はこの答えが大好きです。カスタムのdrushコマンドは必要ありません。
Johnathan Elmore
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.