Pages

Wednesday 17 March 2010

Remove files or directories

`rm' removes each given FILE. By default, it does not remove directories. Synopsis:

rm [OPTION]... [FILE]...

If the `-I' or `--interactive=once' option is given, and there are more than three files or the `-r', `-R', or `--recursive' are given,  then `rm' prompts the user for whether to proceed with the entire operation. If the response is not affirmative, the entire command is aborted.

Otherwise, if a file is unwritable, standard input is a terminal, and the `-f' or `--force' option is not given, or the `-i' or `--interactive=always' option _is_ given, `rm' prompts the user for whether to remove the file. If the response is not affirmative, the file is skipped. Any attempt to remove a file whose last file name component is `.' or `..' is rejected without any prompting. _Warning_: If you use `rm' to remove a file, it is usually possible to recover the contents of that file. If you want more assurance that the contents are truly unrecoverable, consider using `shred'.

The program accepts the following options. Also see *note Common options::.

`-f'
`--force'

Ignore nonexistent files and never prompt the user. Ignore any previous `--interactive' (`-i') option.

`-i'
Prompt whether to remove each file. If the response is not affirmative, the file is skipped. Ignore any previous `--force'  (`-f') option. Equivalent to `--interactive=always'.

`-I'
Prompt once whether to proceed with the command, if more than three files are named or if a recursive removal is requested. Ignore any previous `--force' (`-f') option. Equivalent to `--interactive=once'.

`--interactive [=WHEN]'
Specify when to issue an interactive prompt. WHEN may be omitted, or one of:
* never - Do not prompt at all.
* once - Prompt once if more than three files are named or if a
* always - Prompt for every file being removed. Equivalent to
`-i'.
`--interactive' with no WHEN is equivalent to `--interactive=always'.
`--one-file-system'

When removing a hierarchy recursively, skip any directory that is on a file system different from that of the corresponding command line argument. This option is useful when removing a build "chroot" hierarchy,
which normally contains no valuable data. However, it is not uncommon to bind-mount `/home' into such a hierarchy, to make it easier to use one's start-up file. The catch is that it's easy to forget to unmount `/home'. Then, when you use `rm -rf' to remove your normally throw-away chroot, that command will remove
everything under `/home', too. Use the `--one-file-system' option, and it will warn about and skip directories on other file systems. Of course, this will not save your `/home' if it and your chroot happen to be on the same file system.

`--preserve-root'
Fail upon any attempt to remove the root directory, `/', when used with the `--recursive' option. This is the default behavior. *Note Treating / specially::.
`--no-preserve-root'
Do not treat `/' specially when removing recursively. This option is not recommended unless you really want to remove all the files on your computer. *Note Treating / specially::.

`-r'
`-R'
`--recursive'
Remove the listed directories and their contents recursively.

`-v'
`--verbose'
Print the name of each file before removing it.


One common question is how to remove files whose names begin with a `-'. GNU `rm', like every program that uses the `getopt' function to parse its arguments, lets you use the `--' option to indicate that all following arguments are non-options. To remove a file called `-f' in the current directory, you could type either:

rm -- -f

or:

rm ./-f

The Unix `rm' program's use of a single `-' for this purpose predates the development of the getopt standard syntax.  An exit status of zero indicates success, and a nonzero value indicates failure.

No comments: