2010-08-18 55 views
25

是否有任何庫或函數爲emacs lisp執行類似bash的glob擴展?emacs lisp列出擴展名爲glob的文件

例如:

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

如果沒有這樣的功能沒有關於如何實現它任何暗示/建議嗎?

編輯:

文件擴展-通配符:

我在做相當正是這個docs也是一個有用的功能發現 此功能擴展了通配符模式模式,返回與之匹配的文件名列表。

+2

謝謝 - file-expand-wildcards正是我想要的 – Greg 2011-11-04 03:25:59

回答

19

退房的文檔directory-files

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

注:第三個參數是一個正則表達式 - 而不是通配符。

直接將globbing模式轉換爲正則表達式。 eshell配備了一個翻譯包,您可以使用:

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

而且,如果你想完全置身於ESHELL通配符真實(使用目錄),有可能是一個辦法讓。上面假設globbing部分位於路徑的非目錄部分。

+0

非常感謝你的明確解釋和進一步的想法! – pygabriel 2010-08-19 16:05:29

3

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") 
9

不知道爲什麼這也許忽略它不是在Emacs在2010年,但在當前Emacs至少有功能file-expand-wildcards

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

這正是你想要做的..

+0

哦,看到了已經包含這個Q的編輯,但是因爲我在這裏忽略了它,無論如何我都會留下我的答案 – 2015-05-22 17:17:33