Initial revision
This commit is contained in:
parent
87853d6f12
commit
1273c9fff5
100
contrib/auto_del.csh
Executable file
100
contrib/auto_del.csh
Executable file
|
|
@ -0,0 +1,100 @@
|
|||
#!/bin/csh -f
|
||||
|
||||
# Set this to where this program, and convdate reside so they can be invoked.
|
||||
set MY_DIR = /usr/fsp/bin
|
||||
|
||||
# Set this to where you want the log files stored. If you don't want
|
||||
# any log files, set this to /dev/null
|
||||
set LOG_DIR = /usr/fsp/logs
|
||||
|
||||
# Set this to point to the top level of your FSP export directory
|
||||
set FSP_HOME = /usr/fsp/data
|
||||
|
||||
# auto_del version 1.0
|
||||
|
||||
# A c-shell script that uses convdate, and walks all directories under
|
||||
# your FSP home directory in order to find files that are out dated.
|
||||
# It allows complete control of how long to leave files alone via 2
|
||||
# files, .FSP_EXPIRE and .FSP_TIMEOUT. If neither of these two files
|
||||
# exist, the directory is ignored, if either of them exist, every file
|
||||
# in the directory is tested to see if it should be expired or timed
|
||||
# out. Each of the two files contains one line containing an integer.
|
||||
# This integer is the number of days after which a file should be
|
||||
# expired or timed out. The .FSP_EXPIRE causes the script to check
|
||||
# the current date against the last access (includes reads) time and
|
||||
# if it's greater, remove it. The .FSP_TIMEOUT checks the last
|
||||
# modified time and compares it to the date and if it has been around
|
||||
# too long, to remove it.
|
||||
|
||||
# This simple script written by Joseph Traub (jtraub@cs.cmu.edu)
|
||||
# Feel free to use it, hack it, have sex with it, or whatever.
|
||||
# Author disclaims any responsibility whatsoever for any acts performed
|
||||
# with this script or any derivitive thereof.
|
||||
|
||||
|
||||
# if we are called with no arguments start at the top level of the export dir.
|
||||
# otherwise start at the directory we're called with.
|
||||
if ( ${#argv} == 1 ) then
|
||||
cd $1
|
||||
else
|
||||
cd $FSP_HOME
|
||||
endif
|
||||
|
||||
# Look for the two special files that mark this directory as a victim for
|
||||
# this scripts tender mercies.
|
||||
if ( -e .FSP_EXPIRE || -e .FSP_TIMEOUT) then
|
||||
set can_remove = 1
|
||||
else
|
||||
set can_remove = 0
|
||||
endif
|
||||
|
||||
# Get the time limit for auto-expiration. The file .FSP_EXPIRE should
|
||||
# contain one line which has an integer number of days.
|
||||
if (-e .FSP_EXPIRE) then
|
||||
set expire_time = `cat .FSP_EXPIRE`
|
||||
else
|
||||
set expire_time = 0
|
||||
endif
|
||||
|
||||
# Get the time limit for auto-expiration. The file .FSP_TIMEOUT should
|
||||
# contain one line which has an integer number of days.
|
||||
if (-e .FSP_TIMEOUT) then
|
||||
set time_out = `cat .FSP_TIMEOUT`
|
||||
else
|
||||
set time_out = 0
|
||||
endif
|
||||
|
||||
# I include .* here as a hack to keep it from printing errors when it
|
||||
# doesn't find any normal files.
|
||||
foreach i (* .*)
|
||||
if ( $i !~ .* ) then
|
||||
if ( -d $i ) then
|
||||
$MY_DIR/auto_del $i
|
||||
else
|
||||
if ( $can_remove ) then
|
||||
set removed = 0
|
||||
set atime = `$MY_DIR/convdate -a $i`
|
||||
set mtime = `$MY_DIR/convdate -m $i`
|
||||
set d = `date`
|
||||
set date = `$MY_DIR/convdate -d $d`
|
||||
set file_age = 0
|
||||
@ file_age = $date - $mtime
|
||||
set last_read = 0
|
||||
@ last_read = $date - $atime
|
||||
if ( $time_out ) then
|
||||
if ( $time_out < $file_age ) then
|
||||
\rm -rf $i >& /dev/null
|
||||
echo "[$d] timedout $i" >> $LOG_DIR/auto_del.log
|
||||
set removed = 1
|
||||
endif
|
||||
endif
|
||||
if ( $expire_time && ! $removed ) then
|
||||
if ( $expire_time < $last_read ) then
|
||||
\rm -rf $i >& /dev/null
|
||||
echo "[$d] expired $i" >> $LOG_DIR/auto_del.log
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
end
|
||||
Loading…
Reference in New Issue
Block a user