遍历目录树

时间:2009-09-24 19:33:04

标签: emacs elisp

我正在尝试遍历给定目录并创建以.jpg结尾的文件列表。

(setq files (list ))

(defun jpg-list(directory)  
  (dolist (node (directory-files directory t ) )
      (if (file-directory-p node)      
          (if (not 
           (string= (substring node (- (string-width node) 1)) "."))
             (jpg-list node))
    (if (string-match ".jpg" node)
        (setq files (cons node files)))))
  files)

我想在不使用外部变量(文件)的情况下这样做。在elisp中这样做的惯用方法是什么?

2 个答案:

答案 0 :(得分:5)

您最好的选择是使用'directory-files完整界面,只需使用:

(directory-files directory t ".jpg$")

更大的问题是如何避免顶级变量,这通常由'let语句解决,例如

(defun jpg-list (directory)
  (let ((files))
    ...do something with files...
    files))

答案 1 :(得分:4)

这是我的功能解决方案:

(defun jpg-list (dir)
  (if (file-directory-p dir)
      (append
       (directory-files dir t ".jpg$")
       (apply 'append (mapcar 'jpg-list (directory-files dir t "[^.]+"))))))