---
name: "fastrm"
section: "8"
platform: "linux"
package: "inn"
version: "1:1.7.2q-52"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/fastrm/8"
---

# fastrm(8)

quickly remove a set of files

## NAME

fastrm - quickly remove a set of files

## SYNOPSIS

**fastrm** \[ **-d** \] \[ **-e** \] \[ **-u***N* \] \[ **-s***M* \] \[ **-c***I* \] *base\_directory*

## DESCRIPTION

*Fastrm* reads a list of files, one per line, from its standard input and removes them. If a file is not an absolute pathname, it is taken relative to the directory specified on the command line. The *base\_directory* parameter must be a simple absolute pathname — that is, it must not contain any \`\`/./'' or \`\`/../'' references.

*Fastrm* is designed to be faster than the typical \`\`\| xargs rm'' pipeline. For example, *fastrm* will usually [*chdir*(2)](/chdir/2.md) into a directory before removing files from it. If the input is sorted, this means that most files to be removed will be simple names.

*Fastrm* assumes that its input is valid and that it is safe to just do an [*unlink*(2)](/unlink/2.md) call for each item to be removed. As a safety measure, if *fastrm* is run by root it will first [*stat*(2)](/stat/2.md) the item to make sure that it is not a directory before unlinking it.

## OPTIONS

- **-d**

  If the \`\`**-d**'' flag is used then no files are removed. Instead a list of the files to be removed, in debug form, is printed on the standard output. Each line contains either the current directory of *fastrm* at the time it would do the unlink, and then the path name it would pass to [*unlink*(2)](/unlink/2.md) as two fields separated by white space and a \`\`/'', or the absolute path name (a single field) of files it would unlink using the absolute path name.

- **-e**

  If the \`\`**-e**'' flag is used, *fastrm* will treat an empty input file (**stdin**) as an error. This is most useful when  *fastrm* is last in a pipeline after a preceding [**sort**(1)](/sort/1.md) as if the sort fails, there will usually be no output to become input of *fastrm*.

- **-u**

  If the \`\`**-u**'' flag is used, then *fastrm* makes further assumptions about its work environment; in particular, that there are no symbolic links in the target tree. This flag also suggests that it is probably faster to reference the path *\`\`../../../''* rather than start from the root and come down. (Note that this probably isn't true on systems that have a namei cache, which usually holds everything except *\`\`..''*). The optional *N* is an integer that specifies the maximum number of *\`\`..''* segments to use — paths that would use more than this use the absolute path name (from the root) instead. If the \`\`-u'' flag is given without a value, \`\`-u1'' is assumed.

- **-s**

  If the \`\`**-s**'' flag is used, then *fastrm* will perform the unlinks from one directory — that is when a group of files in one directory appear in the input consecutively — in the order that the files appear in the directory from which they are to be removed. The intent of this flag is that on systems that have a per-process directory cache, finding files in the directory should be faster. It can have smaller benefits on other systems. The optional *M* is an integer that specifies the number of files that must be going to be removed from one directory before the files will be ordered. If the \`\`**-s**'' flag is given without a value, \`\`**-s5**'' is assumed. When the directory reordering is in use *fastrm* will avoid attempting to unlink files that it can't see in the directory, which can speed it appreciably when many of the file names have already been removed.

- **-c**

  The \`\`**-c**'' flag may be given to instruct *fastrm* when it should [*chdir*(2)](/chdir/2.md). If the number of files to be unlinked from a directory is at least *I* then *fastrm* will *chdir* and unlink the files from in the directory. Otherwise it will build a path relative to its current directory. If \`\`**-c**'' is given without the optional integer *I* then \`\`**-c1**'' is assumed, which will cause *fastrm* to always use *chdir*. If \`\`**-c**'' is not used at all, then \`\`**-c3**'' is assumed. Use \`\`**-c0**'' to prevent *fastrm* from ever using [*chdir*(2)](/chdir/2.md).

- **-a -r**

  There are also \`\`-a'' and \`\`-r'' options, which do nothing at all, except allow you to say \`\`fastrm -usa'' \`\`fastrm -ussr'' or \`\`fastrm -user''. These happen to often be convenient sets of options to use.

## EXIT STATUS

*Fastrm* exits with a status of zero if there were no problems, or one if something went wrong. Attempting to remove a file that does not exist is not considered a problem. If the program exits with a non-zero status, it is probably a good idea to feed the list of files into an \`\`xargs rm'' pipeline.

## HISTORY

This is revision 1.3, dated 1996/10/29.
