我正在尝试遍历给定目录并创建以.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中这样做的惯用方法是什么?
答案 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 "[^.]+"))))))