Имена файлов
Истинное имя файла — это имя, которое получается при последовательном слежении за символическими ссылками на всех уровнях до тех пор, пока они не закончатся, затем упрощается удалением элементов имени «.» и «..». Это приводит к своего рода каноническому имени файла. Файл не всегда имеет уникальное истинное имя; количество различных истинных имён файла равно количеству жёстких ссылок на файл. Однако истинные имена полезны, поскольку они устраняют символические ссылки как причину различий имён.
- Функция: file-truename имя_файла
-
Эта функция возвращает истинное имя файла имя_файла. Если аргумент не является абсолютным именем файла, эта функция сначала расширяет его относительно
default-directory.Эта функция не расширяет переменные среды. Только
substitute-in-file-nameэто делает. См. Определение подстановки в имени файла.Если вам необходимо следить за символическими ссылками, предшествующими элементам имени «..», вызывайте
file-truenameбез предварительных прямых или косвенных вызововexpand-file-name. В противном случае элемент имени файла, непосредственно предшествующий «..», будет упрощён до удаления перед вызовомfile-truename. Чтобы избежать необходимости вызоваexpand-file-name,file-truenameобрабатывает «~» так же, как иexpand-file-name.Если целевой объект символической ссылки имеет синтаксис имени удалённого файла,
file-truenameвозвращает его в кавычках. См. Функции расширения имён файлов.
- Функция: file-chase-links имя_файла &опционально предел
-
Эта функция отслеживает символические ссылки, начиная с имя_файла, пока не найдёт имя файла, которое не является именем символической ссылки. Затем она возвращает это имя файла. Эта функция не отслеживает символические ссылки на уровне родительских каталогов.
Если вы укажете число для предел, то после отслеживания указанного количества ссылок функция просто возвращает то, что у неё есть, даже если это всё ещё символическая ссылка.
Чтобы проиллюстрировать разницу между file-chase-links и file-truename, предположим, что /usr/foo — символическая ссылка на каталог /home/foo, а /home/foo/hello — обычный файл (или, по крайней мере, не символическая ссылка) или несуществующий. Тогда у нас будет:
(file-chase-links "/usr/foo/hello")
;; This does not follow the links in the parent directories.
⇒ "/usr/foo/hello"
(file-truename "/usr/foo/hello")
;; Assuming that /home is not a symbolic link.
⇒ "/home/foo/hello"
- Функция: file-equal-p файл1 файл2
Эта функция возвращает
t, если файлы файл1 и файл2 называют один и тот же файл. Это аналогично сравнению их истинных имён, за исключением того, что имена удалённых файлов также обрабатываются соответствующим образом. Если файл1 или файл2 не существует, значение возврата не определено.
- Функция: file-name-case-insensitive-p имя_файла
-
Иногда имена файлов или их части необходимо сравнивать как строки, в этом случае важно знать, является ли подлежащая файловая система регистронезависимой. Эта функция возвращает
tесли файл имя_файла находится на регистронезависимой файловой системе. Она всегда возвращаетtв MS-DOS и MS-Windows. В Cygwin и macOS файловые системы могут быть или не быть регистронезависимыми, и функция пытается определить регистронезависимость путём выполнения теста во время работы. Если тест не даёт однозначного результата, функция возвращаетtв Cygwin иnilв macOS.В настоящее время эта функция всегда возвращает
nilна платформах, отличных от MS-DOS, MS-Windows, Cygwin и macOS. Она не обнаруживает регистронезависимость смонтированных файловых систем, таких как Samba-совместные ресурсы или смонтированные по NFS объёмы Windows. На удалённых хостах она предполагаетtдля метода «smb». Для всех остальных методов подключения выполняются тесты во время работы.
- Функция: file-in-directory-p файл каталог
Эта функция возвращает
tесли файл является файлом в каталоге каталог или в подкаталоге каталог. Она также возвращаетtесли файл и каталог являются одним и тем же каталогом. Она сравнивает истинные имена двух каталогов. Если каталог не называет существующий каталог, значение возврата равноnil.
- Функция: vc-responsible-backend файл
-
Эта функция определяет ответственный VCS-бэкенд заданного файла. Например, если emacs.c является файлом, отслеживаемым Git,
(vc-responsible-backend "emacs.c")возвращает «Git». Обратите внимание, что если файл является символической ссылкой,vc-responsible-backendне будет разрешать её — сообщается бэкенд самого файла символической ссылки. Чтобы получить ответственный VCS-бэкенд файла, на который ссылается файл, оберните файл функцией разрешения символической ссылки, например,file-chase-links:(vc-responsible-backend (file-chase-links "emacs.c"))
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Truenames.html