Do you run
find
on your machine every night? Do you know what it has
to go through just to find out if a file is three days old and smaller
than 10 blocks or owned by "fred" or setuid root?
This is why I tried to combine all the things we need done for
removal of files into one big
find
script:
2>&1
|
#! /bin/sh
#
# cleanup - find files that should be removed and clean them
# out of the file system.
find / \( \( -name '#*' -atime +1 \) \
-o \( -name ',*' -atime +1 \) \
-o \( -name rogue.sav -atime +7 \) \
-o \( \( -name '*.bak' \
-o -name '*.dvi' \
-o -name '*.CKP' \
-o -name '.*.bak' \
-o -name '.*.CKP' \) -atime +3 \) \
-o \( -name '.emacs_[0-9]*' -atime +7 \) \
-o \( -name core \) \
-o \( -user guest -atime +9 \) \
\) -print -exec rm -f {} \; > /tmp/.cleanup 2>&1
|
[This is an example of using a single
find
command to search
for files with different names and last-access times (see article
17.5
).
As Chris points out, doing it all
with one
find
is much faster, and less work for the disk, than
running a lot of separate
find
s.
The parentheses group each part of the expression.
The neat indentation makes this big thing easier to read.
The
-print
-exec
at the end removes each file and also writes the
filenames to standard output, where they're collected into a file named
/tmp/.cleanup
-people can read it to see what files were removed.
You should probably be aware that printing the names to
/tmp/.cleanup
lets everyone see pathnames,
like
/home/joe/personal/resume.bak
, that some
people might consider sensitive.
Another thing to be aware of is that
this
find
command starts at the root directory; you
can do the same thing for your own directories.
-JP
]