19.12 Miscellaneous File Operations

Emacs has commands for performing many other operations on files. All operate on one file; they do not accept wildcard file names.

M-x delete-file prompts for a file and deletes it. If you are deleting many files in one directory, it may be more convenient to use Dired rather than delete-file. See Deleting Files with Dired.

M-x move-file-to-trash moves a file into the system Trash (or Recycle Bin). This is a facility available on most operating systems; files that are moved into the Trash can be brought back later if you change your mind. (The way to restore trashed files is system-dependent.)

By default, Emacs deletion commands do not use the Trash. To use the Trash (when it is available) for common deletion commands, change the variable delete-by-moving-to-trash to t. This affects the commands M-x delete-file and M-x delete-directory (see File Directories), as well as the deletion commands in Dired (see Deleting Files with Dired). Supplying a prefix argument to M-x delete-file or M-x delete-directory makes them delete outright, instead of using the Trash, regardless of delete-by-moving-to-trash.

If you have delete-by-moving-to-trash set, and you want to delete files manually in Emacs from the Trash directory, using commands like D (dired-do-delete) doesn’t work well in the Trash directory (it’ll just give the file a new name, but won’t delete anything). If you want to be able to do this, you should create a .dir-locals.el file containing something like the following in the Trash directory:

((dired-mode . ((delete-by-moving-to-trash . nil))))

Note, however, if you use the system “empty trash” command, it’s liable to also delete this .dir-locals.el file, so this should only be done if you delete files from the Trash directory manually.

If a file is under version control (see Version Control), you should delete it using M-x vc-delete-file instead of M-x delete-file. See Deleting and Renaming Version-Controlled Files.

M-x insert-file (also C-x i) inserts a copy of the contents of the specified file into the current buffer at point, leaving point unchanged before the contents. The position after the inserted contents is added to the mark ring, without activating the mark (see The Mark Ring).

M-x insert-file-literally is like M-x insert-file, except the file is inserted literally: it is treated as a sequence of ASCII characters with no special encoding or conversion, similar to the M-x find-file-literally command (see Visiting Files).

M-x write-region is the inverse of M-x insert-file; it copies the contents of the region into the specified file. M-x append-to-file adds the text of the region to the end of the specified file. See Accumulating Text. The variable write-region-inhibit-fsync applies to these commands, as well as saving files; see Customizing Saving of Files.

M-x set-file-modes reads a file name followed by a file mode, and applies that file mode to the specified file. File modes, also called file permissions, determine whether a file can be read, written to, or executed, and by whom. This command reads file modes using the same symbolic or octal format accepted by the chmod command; for instance, ‘u+x’ means to add execution permission for the user who owns the file. It has no effect on operating systems that do not support file modes. chmod is a convenience alias for this function.