我想获取目录中具有特定扩展名的所有文件的列表,然后将其作为参数传递。如何在 ELisp 中做到这一点?
问问题
1066 次
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 回答