Соответствующие процедуры, которые вы ищете: список-каталогов и в-каталоге .
Используя directory-list
, вы можете получить список всех файлов и каталоги в каталоге, заданном некоторым путем (аналогично команде оболочки ls
).
;; ls /some/path
(directory-list "/some/path")
С другой стороны, in-directory
возвращает последовательность, которая производит все из пути для файлов, каталогов и ссылок внутри каталога, рекурсивно проходящие по вложенным подкаталогам (что, кажется, именно то, что вы в первую очередь ищете).
Например, чтобы вернуть имена всех файлов и каталогов, доступных для чтения пользователем под "/some/path"
вы можете:
(for/list ([f (in-directory "/some/path"
(lambda (p)
(member 'read (file-or-directory-permissions p))))])
f)
Вместо этого вы можете использовать path-> string для создания имен файлов в строковом формате. Итак, чтобы создать процедуру list-all-files
:
(define (list-all-files path)
(define (user-readable? f)
(member 'read (file-or-directory-permissions f)))
(for/list ([f (in-directory path user-readable?)])
(path->string f)))
Затем вы можете filter
сгенерировать список, используя любой предикат pred
:
(filter pred (list-all-files "/some/path"))