모든 파일과 하위 디렉토리를 재귀 적으로 나열


15

비어 있지 않은 경로는 경로에서 가져올 수 있으므로 패키지를 사용하여 모든 파일 (경로 포함) 및 하위 디렉토리 (또는 적어도 하위 디렉토리)를 재귀 적으로 나열하는 방법이 있습니까? 현재 디렉토리의 파일)?

내가 찾을 수있는 가장 가까운 projectile-find-file것은 projectile패키지 의 기능 (또는 패키지의 helm-projectile-find-file기능 helm-projectile)이지만 빈 폴더를 나열 할 수없는 것 같습니다. 또한 Git 및 다른 버전 제어 저장소에서만 작동하는 것으로 보이지만이 제한에 대한 해결 방법이있을 수 있습니다.


2
귀하가하려는 일을 확실하게 밝히지는 않지만 [이 블로그 게시물] (www.turingmachine.org/bl/2013-05-29-recursively-listing-directories-in-elisp.html)에 필요한 내용이 포함될 수 있습니다. 또는 [this one] (ergoemacs.org/emacs/elisp_traverse_dir.html)을 초보자로 사용해보십시오.
theldoria

"목록"은 무슨 뜻입니까? 경로가 포함 된 문자열 목록을 반환하는 Emacs Lisp 함수를 원하십니까? 경로가있는 버퍼를 원하십니까 (예 : 한 줄에 하나씩)? 모든 파일을 가진 dired 버퍼를 원하십니까? (마지막으로 쉬운 방법은 ls 스위치에 "-R"을 추가 한 것입니다.)
Omar


@Omar은 : (1)는 패키지의 어느 이멕스의 부분 또는 일부 (2)가 될 것이라고는 하나 맞는지 : I 이상적인 조건을 갖고 helm하거나 ivy, 결과가 표시된다 즉 있는지 helm또는 ivy버퍼. 두 가지 요구 사항을 모두 충족시킬 수 없으면 두 번째 요구 사항이 더 중요합니다.
Evan Aad

1
그것은 실제로 두 가지 다른 질문입니다. 그러나 좋아, 나는 각각에 대한 대답을 제공했다.
Drew

답변:


8

사용한다고 가정하면 ivy이 기능 을 사용할 수 있습니다

    (defun fhd/counsel-everything ()
      "list everything recursively"
      (interactive)
      (let* ((cands (split-string
                     (shell-command-to-string "find .") "\n" t)))
        (ivy-read "File: " cands
                  :action #'find-file
                  :caller 'fhd/counsel-everything)))

감사. 사용하면 helm어떻게 되나요?
Evan Aad

1
죄송합니다 helm. 에 대해 모르겠습니다 . ivy매우 가볍습니다. 쏴
fhdhsni 2016

13

재귀 적으로 디렉토리 파일

(이것은 Emacs 25에 추가 된 것 같습니다)

다음은 설명서 링크입니다 : https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html

이름이 regexp와 일치하는 디렉토리 아래의 모든 파일을 리턴하십시오. 이 함수는 지정된 디렉토리와 해당 서브 디렉토리를 재귀 적으로 검색하여 기본 이름 (즉, 선행 디렉토리가없는)이 지정된 정규 표현식과 일치하는 파일을 찾고 일치하는 파일의 절대 파일 이름 목록을 리턴합니다 (절대 파일 이름 참조) . 파일 이름은 깊이 우선 순서로 리턴됩니다. 즉, 일부 서브 디렉토리의 파일은 상위 디렉토리의 파일보다 먼저 리턴됩니다. 또한 각 하위 디렉토리에있는 일치하는 파일은 기본 이름을 기준으로 사전 순으로 정렬됩니다. 기본적으로 이름이 regexp와 일치하는 디렉토리는 목록에서 생략되지만 선택적 인수 include-directories가 0이 아닌 경우 포함됩니다.

(directory-files-recursively default-directory "")

빈 디렉토리를 찾지 못했습니다
fhdhsni

1
@fhdhsni는 설정을 시도했던 include-directoriest? 저는 Emacs 24에서 일하고 있는데 지금 시도 할 수는 없지만 몇 시간 안에 집에서 테스트 할 수 있습니다.
wvxvw

내 잘못이야. 나는 그렇게하지 않았다. 답변에 포함시킬 수 있습니다.
fhdhsni

4

이 답변은 Lisp 목록을 얻는 대신 파일 및 디렉토리 이름 목록표시 한다고 가정 합니다.

사용 표준 이맥스 명령 find-dired, find-name-dired또는 find-grep-dired. 찾은 파일과 디렉토리 이름은 Dired 모드 버퍼에 표시됩니다. Dired의 모든 힘을 결과에 적용 할 수 있습니다.

라이브러리 find-dired+.el를 사용하는 경우 해당 표준 Emacs 명령의 향상된 버전 find-time-dired이 있으며 지정된 타임 스탬프보다 최신이거나 오래된 파일을 찾는 command 가 있습니다.


find-dired정확히 내가 찾고있는 것이지만 이름 만 인쇄하는 방법이 있습니까? 그렇지 않으면 파일의 크기, 날짜 또는 권한을 전혀 신경 쓰지 않기 때문에 단일 파일 이름이 이유없이 여러 줄을 차지하기 때문입니다. (setcar find-ls-option "-printf '%p\n'")이전에 실행을 시도 find-dired했지만 어떤 이유로 든이 방법으로 항목 위에 Enter 키 를 누르면 파일을 열고 싶지 않습니다 .
Hi-Angel

2
@ Hi-Angel : 결과가 표시되는 버퍼는 Dired 모드입니다. 따라서 (파일 이름 이상을 표시하거나 숨기려면 누르 십시오. 나는 대부분의 시간을 남겨두고 (세부 사항은 표시하지 않음) 세부 사항을 확인하려고 할 때 간단히 켜십시오.
Drew

1

참조 https://github.com/technomancy/find-file-in-project를

파일을 찾거나 디렉토리를 찾는 명령이 있습니다. 그러나 둘다는 아닙니다.

모든 하위 디렉토리와 파일을 하나의 버퍼에 재귀 적으로 나열하려면 Emacs에는 연령에 따라 두 가지 명령이 내장되어 있습니다.

  1. M-x find-dired. CLI 도구에 의존합니다 find. Windows에서는 Cygwin 또는 MYSYS를 설치해야합니다.find

  2. M-x find-lisp-find-dired. find-diredLisp 와 동일 하지만 작성되었습니다. 따라서 타사 종속성이 없습니다. 또한 로케일을 즉시 인식 할 수 있습니다. 그러나 그것은 느리다find-dired


필자의 유스 케이스는 UNIX 쉘 명령 ls또는 Emacs 함수 를 사용하는 모든 사람과 같으며 find-file빈 디렉토리를 포함하여 파일과 디렉토리를 모두 나열합니다.
Evan Aad

인가 find-diredfind-lisp-find-dired그들이 현재 디렉토리의뿐만 아니라 내용을 나열 점에서 재귀하지만 등 하위 디렉토리 하위의 서브 디렉토리의 각도 내용?
Evan Aad

예, 재귀
첸 빈

1

이 대답은 파일 및 디렉토리 이름의 목록 목록을 표시하는 대신 Lisp 목록얻으려고 한다고 가정 합니다.

Dired + 라이브러리를 사용 하면 function을 사용할 수 있습니다 diredp-files-within. 사용하기 위해 Dired 버퍼에있을 필요는 없습니다.

이것은 모든 Emacs 버전에서 작동하며보다 일반적 directory-files-recursively입니다.

  • 파일 및 디렉토리 목록 을 전달할 수 있으며 각 파일에서 재귀 적으로 작동합니다.

  • 또는 그러한 목록을 반환 하는 함수 를 전달할 수 있습니다 .

    • 처리되는 디렉토리에 대해 Dired 버퍼가 있으면 해당 버퍼에서 함수가 호출되어 포함 할 파일 목록을 리턴합니다.

      예를 들어, 함수가 표시된dired-get-marked-files 경우 표시된 파일 및 서브 디렉토리 만 포함됩니다.

  • 각 파일 또는 디렉토리가 만족해야하는 술어 를 전달할 수 있습니다 . 정규 표현식 일치는 물론 일종의 술어입니다.

  • 기호 링크를 따르지 않도록 지시 할 수 있습니다.


0
(defun my-dir-list (소스)
  ;;
  ;; 현재 버퍼에리스트 파일 인쇄
  ;;
  ;; 테스트되지 않음, 시스템 유형 : gnu
  ;; 테스트를 거친 시스템 유형 : windows-nt
  ;;
  (대화식 "디렉토리 :")
  (((n 0)
    (l-file-dir (및 (cd 소스) (디렉토리 파일 및 속성 "./")))
    (dir-list '())
    (파일 목록 '())
    )
    (princ (형식 "% s \ n"기본 디렉토리) (현재 버퍼))
    (l-file-dir 동안
      (if (n 번째 1 (car l-file-dir))
      (세트 qn (1 + n)
        dir-list (cons ((lambda (소스)
                  (및 ((string-prefix-p "."(car source))) 소스가 아님)
                (car l-file-dir) dir-list)
        )
    (princ ( "% s \ n 형식"(concat 기본 디렉토리))
                      (및 (문자열 일치 "\\. [0-9 | Az]"(caar l-file-dir)))
                       (caar l-file-dir)))) (현재 버퍼)
    )
      (setq l-file-dir (cdr l-file-dir))
      )
    ((caar dir-list) 동안
      (setq 디렉토리 목록 (cdr 디렉토리 목록))
      (cd "..")
      )
    )
  '확인
  )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.