25.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. 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.