Книга: Practical Common Lisp
Walking a Directory Tree
Walking a Directory Tree
Finally, to round out this library, you can implement a function called walk-directory
. Unlike the functions defined previously, this function doesn't need to do much of anything to smooth over implementation differences; it just needs to use the functions you've already defined. However, it's quite handy, and you'll use it several times in subsequent chapters. It will take the name of a directory and a function and call the function on the pathnames of all the files under the directory, recursively. It will also take two keyword arguments: :directories
and :test
. When :directories
is true, it will call the function on the pathnames of directories as well as regular files. The :test
argument, if provided, specifies another function that's invoked on each pathname before the main function is; the main function will be called only if the test function returns true.
(defun walk-directory (dirname fn &key directories (test (constantly t)))
(labels
((walk (name)
(cond
((directory-pathname-p name)
(when (and directories (funcall test name))
(funcall fn name))
(dolist (x (list-directory name)) (walk x)))
((funcall test name) (funcall fn name)))))
(walk (pathname-as-directory dirname))))
Now you have a useful library of functions for dealing with pathnames. As I mentioned, these functions will come in handy in later chapters, particularly Chapters 23 and 27, where you'll use walk-directory
to crawl through directory trees containing spam messages and MP3 files. But before we get to that, though, I need to talk about object orientation, the topic of the next two chapters.
Copyright © 2003-2005, Peter Seibel
- 15. Practical: A Portable Pathname Library
- The API
- EXTERNAL FUNCTION DIRECTORY
- Безопасность внешних таблиц. Параметр EXTERNAL FILE DIRECTORY
- ТМР DIRECTORY
- 5.1.2. The Directory Server Interface
- Directory Permissions
- Initializing the Data Directory in PostgreSQL
- Populating Your Directory
- Listing Files in the Current Directory with ls
- The Linux Source Tree
- 4.2.1. Top-Level Source Directory