26.10 Содержимое каталогов

Каталог — это разновидность файла, который содержит другие файлы, зарегистрированные под различными именами. Каталоги являются особенностью файловой системы.

Emacs может вывести имена файлов в каталоге в виде списка Lisp или отобразить имена в буфере с помощью команды оболочки ls. В последнем случае он может дополнительно отображать информацию о каждом файле в зависимости от параметров, переданных команде ls.

Функция: directory-files каталог &optional полное-имя регвыр-совпадения без-сортировки количество

Эта функция возвращает список имен файлов в каталоге каталог. По умолчанию список отсортирован в алфавитном порядке.

Если полное-имя не равно nil, функция возвращает абсолютные имена файлов. В противном случае она возвращает имена относительно указанного каталога.

Если регвыр-совпадения не равно nil, эта функция возвращает только те имена файлов, некаталоговая часть которых содержит совпадение с этим регулярным выражением — остальные имена файлов исключаются из списка. В файловых системах без учета регистра сравнение с регулярным выражением выполняется без учета регистра.

Если без-сортировки не равно nil, directory-files не сортирует список, поэтому вы получаете имена файлов в произвольном порядке. Используйте это, если вам нужна максимально возможная скорость и вам не важен порядок обработки файлов. Если порядок обработки виден пользователю, то пользователю, вероятно, будет удобнее, если вы отсортируете имена.

Если количество не равно nil, функция вернет имена первых количество файлов или имена всех файлов — в зависимости от того, что наступит раньше. количество должно быть целым числом больше нуля.

(directory-files "~lewis")
     ⇒ ("#foo#" "#foo.el#" "." ".."
         "dired-mods.el" "files.texi"
         "files.texi.~1~")

Сигнализируется ошибка, если каталог не является именем каталога, доступного для чтения.

Функция: directory-empty-p каталог

Эта вспомогательная функция возвращает t, если указанный каталог является доступным каталогом и не содержит никаких файлов, то есть является пустым каталогом. Она игнорирует ‘.’ и ‘..’ в системах, которые возвращают их как файлы в каталоге.

Символические ссылки на каталоги считаются каталогами. Смотрите file-symlink-p для различения символических ссылок.

Функция: directory-files-recursively каталог регвыр &optional включать-каталоги предикат следовать-ссылкам

Возвращает все файлы в каталог, имена которых соответствуют регвыр. Эта функция рекурсивно обходит указанный каталог и его подкаталоги в поисках файлов, чьи базовые имена (т. е. без ведущих каталогов) соответствуют указанному регвыр, и возвращает список абсолютных имен файлов с совпадениями (см. абсолютные имена файлов). Имена файлов возвращаются в порядке обхода в глубину, что означает, что файлы в некотором подкаталоге возвращаются раньше файлов в его родительском каталоге. Кроме того, файлы с совпадениями, найденные в каждом подкаталоге, сортируются по алфавиту по их базовым именам. По умолчанию каталоги, имена которых соответствуют регвыр, исключаются из списка, но если необязательный аргумент включать-каталоги не равен nil, они включаются.

По умолчанию обход выполняется во всех подкаталогах. Если предикат равен t, ошибки при попытке войти в подкаталог (например, если он недоступен для чтения данному пользователю) игнорируются. Если он не равен ни nil, ни t, то это должна быть функция, принимающая один параметр (имя подкаталога) и возвращающая не nil, если в этот каталог нужно заходить.

Символические ссылки на подкаталоги по умолчанию не отслеживаются, но если следовать-ссылкам не равно nil, они отслеживаются.

Функция: locate-dominating-file файл имя

Начиная с файл, поднимается по иерархии дерева каталогов в поисках первого каталога, в котором существует имя (строка), и возвращает этот каталог. Если файл является файлом, его каталог будет служить отправной точкой для поиска; в противном случае файл должен быть каталогом, с которого начинается поиск. Функция просматривает начальный каталог, затем его родительский, затем родительский родительского и т. д., пока либо не найдет каталог с имя, либо не достигнет корневого каталога файловой системы, не найдя имя — в последнем случае функция возвращает nil.

Аргумент имя также может быть функцией-предикатом. Предикат вызывается для каждого каталога, проверяемого функцией, начиная с файл (даже если файл не является каталогом). Он вызывается с одним аргументом (файл или каталог) и должен возвращать не nil, если этот каталог является искомым.

Функция: file-in-directory-p файл каталог

Эта функция возвращает t, если файл является файлом в каталоге каталог или в подкаталоге каталог. Она также возвращает t, если файл и каталог являются одним и тем же каталогом. Она сравнивает истинные имена двух каталогов. Если каталог не является именем существующего каталога, возвращаемое значение — nil.

Функция: directory-files-and-attributes каталог &optional полное-имя регвыр-совпадения без-сортировки формат-id количество

Эта функция аналогична directory-files в определении того, о каких файлах сообщать и как сообщать их имена. Однако вместо возврата списка имен файлов она возвращает для каждого файла список (имя-файла . атрибуты), где атрибуты — это то, что file-attributes возвращает для этого файла. Необязательный аргумент формат-id имеет тот же смысл, что и соответствующий аргумент file-attributes (см. Определение file-attributes).

Константа: directory-files-no-dot-files-regexp

Это регулярное выражение соответствует любому имени файла, кроме ‘.’ и ‘..’. Точнее, оно соответствует частям любой непустой строки, кроме этих двух. Оно полезно в качестве аргумента регвыр-совпадения для directory-files и directory-files-and-attributes:

(directory-files "/foo" nil directory-files-no-dot-files-regexp)

возвращает nil, если каталог ‘/foo’ пуст.

Функция: file-expand-wildcards шаблон &optional полный регвыр

Эта функция раскрывает шаблон с подстановочными знаками шаблон, возвращая список имен файлов, которые ему соответствуют.

шаблон по умолчанию является строкой с «глоб»/подстановочными знаками, например ‘"/tmp/*.png"’ или ‘"/*/*/foo.png"’, но также может быть регулярным выражением, если необязательный параметр регвыр не равен nil. В любом случае совпадения применяются для каждого подкаталога, поэтому совпадение не может охватывать родительский/дочерний каталог.

Если шаблон задан как абсолютное имя файла, возвращаемые значения также будут абсолютными.

Если шаблон задан как относительное имя файла, он интерпретируется относительно текущего каталога по умолчанию. Возвращаемые имена файлов обычно также относительны относительно текущего каталога по умолчанию. Однако если полный не равен nil, они становятся абсолютными.

Функция: insert-directory файл ключи &optional подстановка полный-каталог-p

Эта функция вставляет (в текущий буфер) список содержимого каталога файл, отформатированный с помощью ls в соответствии с ключи. Она оставляет точку после вставленного текста. ключи могут быть строкой параметров или списком строк, представляющих отдельные параметры.

Аргумент файл может быть либо каталогом, либо спецификацией файла, включающей подстановочные знаки. Если подстановка не равна nil, это означает, что файл следует рассматривать как спецификацию файла с подстановочными знаками.

Если полный-каталог-p не равен nil, это означает, что список каталога должен показывать полное содержимое каталога. Следует указывать t, когда файл является каталогом, а ключи не содержат ‘-d’. (Параметр ‘-d’ для ls указывает описывать сам каталог как файл, а не показывать его содержимое.)

В большинстве систем эта функция работает путем запуска программы вывода списка каталогов, имя которой находится в переменной insert-directory-program. Если подстановка не равна nil, она также запускает оболочку, указанную в shell-file-name, для раскрытия подстановочных знаков.

В системах MS-DOS и MS-Windows обычно отсутствует стандартная программа Unix ls, поэтому эта функция эмулирует стандартную программу Unix ls с помощью кода Lisp.

В качестве технической детали: когда ключи содержат длинный параметр ‘--dired’, insert-directory обрабатывает его особым образом ради dired. Однако обычно эквивалентный короткий параметр ‘-D’ просто передается в insert-directory-program, как и любой другой параметр.

Пользовательская опция: insert-directory-program

Эта пользовательская опция определяет программу, запускаемую для формирования списка каталога для функции insert-directory. Она игнорируется в системах, которые формируют список с помощью кода Lisp.