Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Recursively list files in a given directory
;;; Recursively list files in a given directory
;;; Author: daniel m german dmg at uvic dot ca
;;; Copyright: daniel m german
;;; License: Same as Emacs
(defun directory-files-recursive (directory match maxdepth ignore)
"List files in DIRECTORY and in its sub-directories.
Return files that match the regular expression MATCH but ignore
files and directories that match IGNORE (IGNORE is tested before MATCH. Recurse only
to depth MAXDEPTH. If zero or negative, then do not recurse"
(let* ((files-list '())
(directory-files directory t)))
;; while we are in the current directory
(while current-directory-list
(let ((f (car current-directory-list)))
ignore ;; make sure it is not nil
(string-match ignore f))
; ignore
(file-regular-p f)
(file-readable-p f)
(string-match match f))
(setq files-list (cons f files-list))
(file-directory-p f)
(file-readable-p f)
(not (string-equal ".." (substring f -2)))
(not (string-equal "." (substring f -1)))
(> maxdepth 0))
;; recurse only if necessary
(setq files-list (append files-list (directory-files-recursive f match (- maxdepth -1) ignore)))
(setq files-list (cons f files-list))
(setq current-directory-list (cdr current-directory-list))

This comment has been minimized.

Copy link

commented Sep 12, 2014

line 40 should be deleted

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.