Emacs LISP список файлов с расширением glob - PullRequest
27 голосов
/ 18 августа 2010

Существуют ли какие-либо библиотеки или функции, которые выполняют расширение в стиле bash-подобного для emacs lisp?

Например:

(directory-files-glob "~/Desktop/*")
> ("/home/user/Desktop/file1" "/home/user/Desktop/file2")

Если такой функции нетподсказка / предложение о том, как это реализовать?

РЕДАКТИРОВАТЬ:

Я нашел в документах также полезную функцию, которая делает именно это:1013 *

file-expand-wildcards: эта функция расширяет шаблон шаблона подстановки, возвращая список имен файлов, соответствующих ему.

Ответы [ 3 ]

20 голосов
/ 18 августа 2010

Ознакомьтесь с документацией для directory-files:

(directory-files "~/Desktop" nil ".")

Примечание: Третий аргумент - это регулярное выражение, а не глобализация.

Нетрудно превратить глобинговые шаблоны в регулярные выражения. eshell поставляется с пакетом перевода, который вы можете использовать:

(require 'em-glob)
(defun directory-files-glob (path)
   (directory-files (file-name-directory path) 
                    nil 
                    (eshell-glob-regexp (file-name-nondirectory path))))

И, если вы хотите получить полное представление о глобализации eshell (с каталогами), возможно, есть способ получить это. Вышеприведенное предполагает, что часть-глоббер находится в некаталоговой части пути.

15 голосов
/ 22 мая 2015

Не уверен, почему это было упущено, может быть, это не было в emacs в 2010 году, но в текущем emacs есть функция file-expand-wildcards

(file-expand-wildcards "~/Desktop/*")

, которая точночто ты хочешь сделать ..

4 голосов
/ 06 августа 2014

Пакет f добавляет огромное количество функций управления файлами и путями к файлам в соответствии с последовательной схемой именования.Он имеет функцию f-glob, которая делает именно это:

(f-glob "~/doc/*.org") ; returns a list of files ending with ".org"
(f-glob "*.org" "~/doc/") ; they all behave the same
(f-glob "*.org" "~/doc")
...