ディレクトリ内の特定の拡張子を持つすべてのファイルのリストを取得し、それを引数として渡したい。ELispでそれを行う方法は?
3 に答える
いいえ、追加のフィルタリングは必要ありません。 directory-files
必要なすべてを実行します。つまり、拡張子に一致するフィルタリングを含みます(例ext
)。
(directory-files DIRECTORY nil "\\.ext$")
を参照してくださいC-h f directory-files
。現在のディレクトリには、次のものを使用できます。
(directory-files default-directory nil "\\.ext$")
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にはいくつかのヒントがあります。)
私の経験則は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