Next: Compressed Files, Previous: Diff Mode, Up: Files [Contents][Index]

### 18.11 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 Dired Deletion.

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

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 Directories), as well as the deletion commands in Dired (see Dired Deletion). 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 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 VC Delete/Rename.

`M-x copy-file` reads the file old and writes a new file named new with the same contents.

`M-x copy-directory` copies directories, similar to the `cp -r` shell command. It prompts for a directory old and a destination new. If new is an existing directory, it creates a copy of the old directory and puts it in new. If new is not an existing directory, it copies all the contents of old into a new directory named new.

`M-x rename-file` reads two file names old and new using the minibuffer, then renames file old as new. If the file name new already exists, you must confirm with `yes` or renaming is not done; this is because renaming causes the old meaning of the name new to be lost. If old and new are on different file systems, the file old is copied and deleted. If the argument new is just a directory name, the real new name is in that directory, with the same non-directory component as old. For example, `M-x rename-file RET ~/foo RET /tmp RET` renames `~/foo` to `/tmp/foo`. The same rule applies to all the remaining commands in this section. All of them ask for confirmation when the new file name already exists, too.

If a file is under version control (see Version Control), you should rename it using `M-x vc-rename-file` instead of `M-x rename-file`. See VC Delete/Rename.

`M-x add-name-to-file` adds an additional name to an existing file without removing its old name. The new name is created as a hard link to the existing file. The new name must belong on the same file system that the file is on. On MS-Windows, this command works only if the file resides in an NTFS file system. On MS-DOS, it works by copying the file.

`M-x make-symbolic-link` reads two file names target and linkname, then creates a symbolic link named linkname, which points at target. The effect is that future attempts to open file linkname will refer to whatever file is named target at the time the opening is done, or will get an error if the name target is nonexistent at that time. This command does not expand the argument target, so that it allows you to specify a relative name as the target of the link. On MS-Windows, this command works only on MS Windows Vista and later.

`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 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).

`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 Customize Save.

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

Next: Compressed Files, Previous: Diff Mode, Up: Files [Contents][Index]