#!/usr/bin/perl -w $source='/test/in'; $destin='/web/out'; $copy_count=60; $disk_full=90; @files=(); # read files if disk full if(disk_full($source) > $disk_full) { unless(opendir(DIR,$source)) { die("ERROR open $source ($!)"); } local $file; while($file=readdir(DIR)) { # hier nicht nötig # ignore '.' and '..' #if($file=~/^\.\.?$/) { next; } # ignore dir etc. unless(-f "$source/$file") { next; } push(@files,$file); } close(DIR); } if(@files) { # sort by age @files=sort{-M "$source/$a" <=> -M "$source/$b"}@files; # only $copy_count files while(@files > $copy_count) { shift(@files); } } # move file foreach(@files) { move("$source/$_","$destin/$_"); } ######################################################################## ######################################################################## sub disk_full { local $file=$_[0]; local $ret=0; local $line=''; unless(open(DF, 'df $file |')) { die("ERROR run df $file\n"); } # ignore first line ; # next line is the disk $line=; if($line=~/(\d+)%/) { $ret=$1; } close(DF); return $ret; } sub move { local ($s,$d)=@_; if( system("move '$s' '$d' > /dev/null 2>&1") ) { die("error move $s $d"); } }