This section gives examples of removing unwanted files in various situations. Here is a command to remove the CVS backup files created when an update requires a merge:
find . -name '.#*' -print0 | xargs -0r rm -f
If your find
command removes directories, you may find that
you get a spurious error message when find
tries to recurse
into a directory that has now been removed. Using the ‘-depth’
option will normally resolve this problem.
It is also possible to use the ‘-delete’ action:
find . -depth -name '.#*' -delete
You can run this command to clean out your clutter in /tmp. You might place it in the file your shell runs when you log out (.bash_logout, .logout, or .zlogout, depending on which shell you use).
find /tmp -depth -user "$LOGNAME" -type f -delete
To remove old Emacs backup and auto-save files, you can use a command like the following. It is especially important in this case to use null-terminated file names because Emacs packages like the VM mailer often create temporary file names with spaces in them, like #reply to David J. MacKenzie<1>#.
find ~ \( -name '*~' -o -name '#*#' \) -print0 | xargs --no-run-if-empty --null rm -vf
Removing old files from /tmp is commonly done from cron
:
find /tmp /var/tmp -depth -not -type d -mtime +3 -delete find /tmp /var/tmp -depth -mindepth 1 -type d -empty -delete
The second find
command above cleans out empty directories
depth-first (‘-delete’ implies ‘-depth’ anyway), hoping that
the parents become empty and can be removed too. It uses
‘-mindepth’ to avoid removing /tmp itself if it becomes
totally empty.
Lastly, an example of a program that almost certainly does not do what the user intended:
find dirname -delete -name quux
If the user hoped to delete only files named quux they will get
an unpleasant surprise; this command will attempt to delete everything
at or below the starting point dirname. This is because
find
evaluates the items on the command line as an expression.
The find
program will normally execute an action if the
preceding action succeeds. Here, there is no action or test before
the ‘-delete’ so it will always be executed. The ‘-name
quux’ test will be performed for files we successfully deleted, but
that test has no effect since ‘-delete’ also disables the default
‘-print’ operation. So the above example will probably delete a
lot of files the user didn’t want to delete.
This command is also likely to do something you did not intend:
find dirname -path dirname/foo -prune -o -delete
Because ‘-delete’ turns on ‘-depth’, the ‘-prune’ action has no effect and files in dirname/foo will be deleted too.