Drush를 사용하여 노드 또는 노드 목록을 삭제하는 방법은 무엇입니까?


8

주어진 컨텐츠 유형의 모든 노드를 삭제하는 기능을 제공 하는 Delete all 모듈을 발견했습니다 . 그러나이 모듈을 사용하면 단일 노드 또는 노드 목록을 삭제할 수 없습니다.

" Drush로 특정 컨텐츠 유형의 노드를 삭제할 수 있습니까? "라는 질문에서 명령에 대해 2 개의 답변을 찾았 drush node_delete <nid>지만이 명령을 찾을 수 없습니다.

이 작업을 수행하기 위해 eval을 사용 하는 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명령을 사용해야하는 경우 모듈의 dev 버전을 사용해야합니다 : https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


감사 그렉, 당신은 항상 ;-) drush 식료품 도와
아드리안 시드 Almaguer

drush entity 모듈 내에서 노드 삭제를 허용하지 않는 버그를 발견했습니다. 나중에 패치를 커밋합니다.
Adrian Cid Almaguer


누군가 drush entity-delete가이 순간에 Drush Entity 모듈 drupal.org/project/drush_entity/releases/7.x-5.x-dev
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 명령이 있으면 필요할 수있는 인수와 옵션을 추가 할 수 있다고 생각합니다. 그리고 쉽게 검증을 추가 할 수 있습니다.
Adrian Cid Almaguer

나는이 답변을 좋아한다. 맞춤형 drush 명령이 필요하지 않습니다.
Johnathan Elmore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.