4

我想获取目录中具有特定扩展名的所有文件的列表,然后将其作为参数传递。如何在 ELisp 中做到这一点?

4

3 回答 3

6

不,您不需要任何额外的过滤。 directory-files做你想做的一切,即包括过滤以匹配扩展名(例如ext):

(directory-files DIRECTORY nil "\\.ext$")

C-h f directory-files。对于当前目录,您可以使用:

(directory-files default-directory nil "\\.ext$")
于 2013-10-12T16:45:29.493 回答
2

directory-files检索目录中的所有文件作为列表。 remove-if-not删除与谓词不匹配的列表条目。

(require 'cl)
(remove-if-not (lambda (filename) (eq "ext" (file-name-extension filename)))
               (directory-files dir) )

(我很想避免(require 'cl)那里 。http: //emacswiki.org/emacs/ElispCookbook#toc38有一些提示。)

于 2012-10-09T09:03:02.463 回答
0

我的经验法则是f每次在 Elisp 中处理文件和文件路径时都使用库。在这里,您需要f-files获取目录中的文件列表并f-ext从文件名中提取扩展名。-filter是列表操作库的remove-if-not等价物。dash因此,您需要的表达式是:

(-filter (lambda (x) (equal (f-ext x) "ext")) (f-files "dir"))

使用照应宏,我们可以通过删除来制作更简洁的表达式lambda(约定是使用 2 个破折号作为照应版本):

(--filter (equal (f-ext it) "ext") (f-files "dir"))

但是f-files接受已经过滤文件列表的自定义函数,那么为什么不丢弃-filter呢?

(f-files "dir" (lambda (x) (equal (f-ext x) "ext")))
(f--files "dir" (equal (f-ext x) "ext")) ; anaphoric version
于 2014-08-04T10:34:54.447 回答