是否有一个包含在Emacs中的函数来递归遍历目录结构并调用函数?

6 emacs elisp

我想以递归方式从特定点向下遍历目录结构,并在每个级别调用copyright-update-directory.

Emacs 24中是否包含有助于此功能的功能?例如:

(recursive-directory-walk "~/src/foo" '(copyright-update-directory))
Run Code Online (Sandbox Code Playgroud)

如果不存在这样的函数,那么开始实现这个(或一个工作实现)的一些指针会很棒.

des*_*esu 3

不确定是否存在,但编写自己的并不难。

(defun folder-dirs (folder)
  (delete-if-not 'file-directory-p
    (mapcar (lambda(arg) (file-name-as-directory (concat (file-name-as-directory folder) arg)))
      (delete-if (lambda (arg) (or (string= ".." arg) (string= "." arg)))
        (directory-files folder)))))

(defun recursively-run-on-every-dir (fn folder)
"FN - function, taking one argument; 
FOLDER - initial forder"
  (funcall fn folder)
  (mapc (lambda(arg) (recursively-run-on-every-dir fn arg))
    (folder-dirs folder))
  nil)

;; use your function instead of print
(recursively-run-on-every-dir 'print "/your/initial/path/")
Run Code Online (Sandbox Code Playgroud)