fastrm - quickly remove a set of files

     fastrm [ -d ] [ -e ] [ -uN ] [ -sM ] [ -cI ] base_directory

     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) 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)  call  for  each  item  to be removed.  As a safety measure, if
     fastrm is run by root it will first stat(2) the item to make sure that it
     is not a directory before unlinking it.


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

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

     -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


     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.

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

You can find a summary and links related to this topic
as part of the Mib Software Usenet RKT.