shell scripting - automating rotation of files in different directories

Matthew D. Fuller fullermd at over-yonder.net
Thu Jun 12 12:15:34 PDT 2003


On Thu, Jun 12, 2003 at 02:58:32PM -0400 I heard the voice of
Dave [Hawk-Systems], and lo! it spake thus:
> For example,
> <brutally pseudo script>
> for($i=30; $i>0;$1--){ # 30 days is maximum retained
> 	for LOG in `ls /users/*/logs/ | grep .$i'`; do
> 		# move any of the previous logs into the current existing
> 		# so that we don't add to number of logs per user
> 		$prevLOG = strreplace(($i-1)($i) on $LOG)
> 		mv $prevLOG $LOG
> 	done
> )
> </brutally pseudoscript>
> 
> Am thinking that the shell script will need to drop to awk to perform the
> disection of the log number extensions...  any thoughts on this/easier methods
> before I sit down and devote some time to it?

You want jot(1) and expr(1).

Something along the lines of:

for i in `jot 29 29 1`; do
    if [ -r /some/dir/log.${i} ] ; then
        mv -f /some/dir/log.${i} /some/dir/log.`expr "${i}" + 1`
    fi
done

(more simplistic than yours, since it doesn't recurse across directories,
but the idea gets across)


-- 
Matthew Fuller     (MF4839)   |  fullermd at over-yonder.net
Systems/Network Administrator |  http://www.over-yonder.net/~fullermd/

"The only reason I'm burning my candle at both ends, is because I
      haven't figured out how to light the middle yet"


More information about the freebsd-questions mailing list