Next: , Previous: Testing Accessibility, Up: Information about Files

25.6.2 Distinguishing Kinds of Files

This section describes how to distinguish various kinds of files, such as directories, symbolic links, and ordinary files.

— Function: file-symlink-p filename

If the file filename is a symbolic link, the file-symlink-p function returns the (non-recursive) link target as a string. (Determining the file name that the link points to from the target is nontrivial.) First, this function recursively follows symbolic links at all levels of parent directories.

If the file filename is not a symbolic link (or there is no such file), file-symlink-p returns nil.

          (file-symlink-p "foo")
               ⇒ nil
          (file-symlink-p "sym-link")
               ⇒ "foo"
          (file-symlink-p "sym-link2")
               ⇒ "sym-link"
          (file-symlink-p "/bin")
               ⇒ "/pub/bin"

The next two functions recursively follow symbolic links at all levels for filename.

— Function: file-directory-p filename

This function returns t if filename is the name of an existing directory, nil otherwise.

          (file-directory-p "~rms")
               ⇒ t
          (file-directory-p "~rms/lewis/files.texi")
               ⇒ nil
          (file-directory-p "~rms/lewis/no-such-file")
               ⇒ nil
          (file-directory-p "$HOME")
               ⇒ nil
          (file-directory-p
           (substitute-in-file-name "$HOME"))
               ⇒ t
— Function: file-regular-p filename

This function returns t if the file filename exists and is a regular file (not a directory, named pipe, terminal, or other I/O device).

— Function: file-equal-p file1 file2

This function returns t if the files file1 and file2 name the same file. If file1 or file2 does not exist, the return value is unspecified.

— Function: file-in-directory-p file dir

This function returns t if file is a file in directory dir, or in a subdirectory of dir. It also returns t if file and dir are the same directory. It compares the file-truename values of the two directories (see Truenames). If dir does not name an existing directory, the return value is nil.