Истинные имена
Истинное имя файла — это имя, которое получается при переходе по символическим ссылкам на всех уровнях, пока они не перестанут встречаться, а затем упрощении компонентов имени ‘.’ и ‘..’. В результате получается своего рода каноническое имя файла. У файла не всегда есть единственное истинное имя: количество различных истинных имён файла равно количеству жёстких ссылок на него. Однако истинные имена полезны, поскольку исключают символические ссылки как причину различий в именах.
- Функция: file-truename filename
-
Эта функция возвращает истинное имя файла filename. Если аргумент не является абсолютным именем файла, эта функция сначала дополняет его относительно
default-directory.Эта функция не раскрывает переменные окружения. Это делает только
substitute-in-file-name. См. Определение substitute-in-file-name.Если может потребоваться переход по символическим ссылкам, предшествующим ‘..’ в качестве компонента имени, вызовите
file-truename, не вызывая предварительно напрямую или косвенноexpand-file-name. В противном случае компонент имени, непосредственно предшествующий ‘..’, будет упрощён до вызоваfile-truename. Чтобы не вызыватьexpand-file-name,file-truenameобрабатывает ‘~’ так же, какexpand-file-name.Если цель символической ссылки имеет синтаксис удалённого имени файла,
file-truenameвозвращает её в кавычках. См. Функции раскрытия имён файлов.
- Функция: file-chase-links filename &optional limit
-
Эта функция переходит по символическим ссылкам, начиная с filename, пока не найдёт имя файла, которое не является именем символической ссылки. Затем она возвращает это имя файла. Эта функция не переходит по символическим ссылкам на уровне родительских каталогов.
Если указать число для limit, функция после перехода по указанному количеству ссылок просто возвращает полученный результат, даже если он всё ещё является символической ссылкой.
Чтобы проиллюстрировать различие между 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 file1 file2
Эта функция возвращает
t, если имена файлов file1 и file2 указывают на один и тот же файл. Это похоже на сравнение их истинных имён, за исключением того, что удалённые имена файлов также обрабатываются надлежащим образом. Если file1 или file2 не существует, возвращаемое значение не определено.
- Функция: file-name-case-insensitive-p filename
-
Иногда имена файлов или их части требуется сравнивать как строки, и в этом случае важно знать, нечувствительна ли файловая система к регистру. Эта функция возвращает
t, если файл filename находится в файловой системе, нечувствительной к регистру. В MS-DOS и MS-Windows она всегда возвращаетt. В Cygwin и macOS файловые системы могут быть как чувствительными, так и нечувствительными к регистру; функция пытается определить это с помощью проверки во время выполнения. Если результат проверки неоднозначен, в Cygwin функция возвращаетt, а в macOS —nil.В настоящее время на платформах, отличных от MS-DOS, MS-Windows, Cygwin и macOS, эта функция всегда возвращает
nil. Она не определяет нечувствительность к регистру у смонтированных файловых систем, например общих ресурсов Samba или томов Windows, смонтированных через NFS. На удалённых узлах для метода ‘smb’ предполагаетсяt. Для всех остальных методов подключения выполняются проверки во время выполнения.
- Функция: vc-responsible-backend file
-
Эта функция определяет ответственную систему управления версиями (VC) для указанного файла file. Например, если emacs.c — файл, отслеживаемый Git,
(vc-responsible-backend "emacs.c")возвращает ‘Git’. Обратите внимание: если file является символической ссылкой,vc-responsible-backendне будет её разрешать — будет указана система управления версиями самого файла символической ссылки. Чтобы получить систему управления версиями файла, на который указывает file, оберните file функцией разрешения символических ссылок, напримерfile-chase-links:(vc-responsible-backend (file-chase-links "emacs.c"))
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Truenames.html