allbery@ncoast.UUCP (05/09/88)
comp.sources.misc: Volume 3, Issue 13 Submitted-By: "A. Nonymous" <rsalz@pineapple.bbn.com> Archive-Name: core_notice We run this script weekly. It will need minor tweaking for other sites, but it's not really BSD or USG dependent. /r$ #To unpack, delete all lines before this and feed to /bin/sh echo core_notice 1>&2 sed -e 's/^X//' >core_notice <<'END' X#! /bin/sh X## X## Script to find old core, etc., files and send mail to their owners. X## It assumes your find has the "-xdev" option to not cross mount X## points. It would like to use System V "xargs" command, but can X## use the BSD "fmt" command as a hack, instead. Also check the mail X## commands, below. X## X## The file core_errs will contain any errors; core_ls will be the full X## list of old and bogus files. X## X X## Setup. Xcd /usr/adm XPATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin XHOST=`hostname` Xrm -f core_ls core_errs core_unknown X X## If first argument is "-i" then we're interactive. Xif [ "x$1" = "x-i" ] ; then X shift Xelse X exec 2>core_errs Xfi X X## Optional next argument is how old files should be before we complain. XAGE=${1-5} X X## Cute trick to get list of directly-mounted filesystems, only. XFILESYSTEMS=`df | awk '$1 ~ /^\/dev\// {print $6}'` X X## You might want to tweak the predicates in here. Xfind ${FILESYSTEMS} \( \ X -name core -o -name a.out \ X -o -name 'drft.[0-9]*' \ X -name 'msg[0-3][0-9][JFMASOND]*' \ X -o -name ',*' \ X -o -name '#*' -o -name '.#*' \ X -o -name '*~' -o -name '.*~' \ X -o -name '.tpen*' \ X \) -a -xdev -a -mtime +${AGE} -print \ X | fmt -200 | sed -e 's@^@/bin/ls -l @' | sh >core_ls X# If you have xargs, it is more efficient. X# | xargs /bin/ls -l >core_ls X X## Unlikely, but maybe we didn't find anything. Xif [ ! -s core_ls ]; then X exec rm -f core_ls Xfi X X## Assuming a standard "ls", third field is the users. Loop over list X## of all badguys. The funky grep commands ignore filenames; be careful X## if your "ls -l" uses tabs. Xfor c in `awk '{print $3}' <core_ls | sort -u` ; do X case $c in X _*|[0-9]*) X grep " $c " core_ls >>core_unknown X ;; X *) X ( X echo "You have the following old files on the ${HOST}:" X grep " $c " core_ls X echo "which are greater than ${AGE} days old." X echo '' X echo 'If you are finished with them, it would be nice to remove' X echo 'them, freeing up the disk space.' X echo '' X echo 'Thanks,' X echo '' X echo "The Filesystem on ${HOST}" X echo '' X ) | \ X Mail -s "Old files on ${HOST}" $c X# We use sendmail; MMDF is probably this: X# v6mail -to $c -subj "Old files on ${HOST}" X ;; X esac Xdone Xif [ -s core_unknown ] ; then X ( X echo "Found unknown old files on ${HOST}:" X cat core_unknown X ) | \ X Mail -s "${HOST}: No owner for these ancient files." root X# We use sendmail; MMDF is probably this: X# v6mail -to root -subj "${HOST}: No owner for these ancient files." Xfi END