2012-07-05 2 views
1

종종 dired 구조를보고, 재귀 적으로 전체 디렉토리를 표시합니다 : (dired dir "-lR"). 이것은 시간의 대부분을 잘 작동합니다.emacs에서 서브 디렉토리를 재귀 적으로 제거합니다. dired

그러나 때때로, Idon't가보고 싶은 거대한 하위 디렉토리 구조가 있습니다. 거기에 완전한 트리가있는 dired 버퍼의 하위 디렉토리를 재귀 적으로 삭제할 수 있습니까?

답변

2

나는 동일한 목적으로 find-dired을 사용합니다. 하위 디렉토리를 제외하기 위해프롬프트에서 다음과 같이 입력합니다 : -path ./exclude_me -prune -o true 그러면 하나의 디렉토리 exclude_me을 제외한 디렉토리의 재귀 목록이 표시됩니다. 이 기능은 Unix 계열의 기능을 find 버전과 함께 사용하는 경우에만 작동합니다.

편집 : 트리를 제거하는 다른 방법은 단순히 dired 버퍼를 읽을 수있게 (C-q C-q) 토글하고 버퍼를 편집하는 것입니다. 당신이 죽이고 싶어 디렉토리에 커서

(defun bp-kill-directory-rec() 
    (interactive) 
    (let (
    (i (point)) 
     (cur-dir (dired-current-directory))) 
    (beginning-of-buffer) 
    (while (search-forward cur-dir nil t) 
     (dired-kill-subdir)) 
    (goto-char i))) 

시작하고, 해당 디렉토리의 모든 하위 디렉토리를 죽일 것이다 :

+0

흠, intercesting. 그것은 dired가 무시한 .hg 디렉토리를 모두 보여 주며, -prune을 사용하면 모든 것을 제외하는 것처럼 보입니다. –

+0

Find는 실제로이 방법으로'-prune'을 사용할 때 적어도 하나 이상의 다른 기준을 필요로합니다. 나는'-path ./exclude_me -prune -o -true'를 사용하여 나의 대답을 업데이트했다. '-o -true'는'exclude_me'에 * 없다면 * 포함합니다. – ataylor

+0

흥미 롭습니다. 하나 이상의 디렉토리에서 사용할 수 있습니까? .hg 및 exclude_me를 제외하고 싶습니까? –

1

좋아, 나는 그냥 다음 elisp을 썼다. 그 속임수는 (dired-current-directory)이 전체 경로를 제공한다는 것입니다. 따라서 검색은 원하는 디렉토리 만 제공해야합니다. /home/a/b/home/c/d/home/a/b과 같은 디렉토리 구조가있는 경우 나쁜 일이 발생할 수 있습니다. 하지만 그렇게하기에는 미친 듯이해야합니다, 안 그래요?

0

Dired+ 명령 diredp-kill-this-tree을 사용하십시오.

커서를 목록에서 제거하려는 하위 디렉토리에 놓고 명령을 호출하십시오. 삽입 된 하위 디렉토리와 그 하위 디렉토리도 모두 삽입 (나열)됩니다.

  • 클릭 mouse-3 및 항목 이 삽입 된 하위 디렉터리 및 낮은 제거를 선택 :

    당신은 서브 디렉토리 목록 내에서 지점을두고 한 후, 다음 중 한 가지 방법으로이 명령을 호출 할 수 있습니다.

  • 메뉴 바 메뉴를 선택 단일 (바닐라 이맥스에서 즉시라고도 함), 항목 이 삽입 된 하위 디렉터리 및 낮은를 제거합니다.