The truename of a file is the name that you get by following symbolic links at all levels until none remain, then simplifying away ‘.’ and ‘..’ appearing as name components. This results in a sort of canonical name for the file. A file does not always have a unique truename; the number of distinct truenames a file has is equal to the number of hard links to the file. However, truenames are useful because they eliminate symbolic links as a cause of name variation.
This function returns the truename of the file filename. If the argument is not an absolute file name, this function first expands it against
This function does not expand environment variables. Only
substitute-in-file-namedoes that. See Definition of substitute-in-file-name.
If you may need to follow symbolic links preceding ‘..’ appearing as a name component, you should make sure to call
file-truenamewithout prior direct or indirect calls to
expand-file-name, as otherwise the file name component immediately preceding ‘..’ will be “simplified away” before
file-truenameis called. To eliminate the need for a call to
file-truenamehandles ‘~’ in the same way that
expand-file-namedoes. See Functions that Expand Filenames.
This function follows symbolic links, starting with filename, until it finds a file name which is not the name of a symbolic link. Then it returns that file name. This function does not follow symbolic links at the level of parent directories.
If you specify a number for limit, then after chasing through that many links, the function just returns what it has even if that is still a symbolic link.
To illustrate the difference between
file-truename, suppose that /usr/foo is a symbolic link to
the directory /home/foo, and /home/foo/hello is an
ordinary file (or at least, not a symbolic link) or nonexistent. Then
we would have:
(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"
See Buffer File Name, for related information.