26.11 Creating, Copying and Deleting Directories

Most Emacs Lisp file-manipulation functions get errors when used on files that are directories. For example, you cannot delete a directory with delete-file. These special functions exist to create and delete directories.

Command: make-directory dirname &optional parents

This command creates a directory named dirname. If parents is non-nil, as is always the case in an interactive call, that means to create the parent directories first, if they don’t already exist. As a function, make-directory returns non-nil if dirname already exists as a directory and parents is non-nil, and returns nil if it successfully created dirname. mkdir is an alias for this.

Command: make-empty-file filename &optional parents

This command creates an empty file named filename. As make-directory, this command creates parent directories if parents is non-nil. If filename already exists, this command signals an error.

Command: copy-directory dirname newname &optional keep-time parents copy-contents

This command copies the directory named dirname to newname. If newname is a directory name, dirname will be copied to a subdirectory there. See Directory Names.

It always sets the file modes of the copied files to match the corresponding original file.

The third argument keep-time non-nil means to preserve the modification time of the copied files. A prefix arg makes keep-time non-nil.

The fourth argument parents says whether to create parent directories if they don’t exist. Interactively, this happens by default.

The fifth argument copy-contents, if non-nil, means to copy the contents of dirname directly into newname if the latter is a directory name, instead of copying dirname into it as a subdirectory.

Command: delete-directory dirname &optional recursive trash

This command deletes the directory named dirname. The function delete-file does not work for files that are directories; you must use delete-directory for them. If recursive is nil, and the directory contains any files, delete-directory signals an error. If recursive is non-nil, there is no error merely because the directory or its files are deleted by some other process before delete-directory gets to them.

delete-directory only follows symbolic links at the level of parent directories.

If the optional argument trash is non-nil and the variable delete-by-moving-to-trash is non-nil, this command moves the file into the system Trash instead of deleting it. See Miscellaneous File Operations in The GNU Emacs Manual. When called interactively, trash is t if no prefix argument is given, and nil otherwise.