linux shell 递归目录文件 删除指定日期之外的文件和空目录

#!/bin/sh

#Name delFileAsDate.sh

#Creation date: 2010-10-30

#Author: Frank Wu

Usage(){

#{{{

        echo 'Usage: sh '$0' <dirList name>' 1>&2

        echo 'e.g.' 1>&2

        echo '  sh '$0' /home/username/workspace/delFileAsDate  /home/username/workspace/dirList' 1>&2

}

#}}}

if [ $#  -lt 1 ]; then

        Usage && exit 1

fi

handleDir(){

      if ls $1/* 2> tmp > tmp

                then

                     rm -rf $1/tmp #Delet tmp file

                     file=`ls $1`

                     for name in $file

                     do

                                if [ -d $1/$name ];

                                then

handleDir $1/$name

                                else

#echo $1/$name

handleFile $1/$name

                                fi

   done            

               else

rm -rf $1/tmp

                                echo "remove ....... Empty dirtionary"$1

#rm -rf $1

fi

}

handleFile(){

        fName=$1

        if [ -f $fName ];

        then

                eval `ls -l $fName | awk {' print "day="$7'}`

               # echo $day

flag=false

       for days in ${ArrDay[*]}

do

#echo "array[i] = "$days 

if [[ "$day" == "$days" ]];

then

  flag=true

fi

done

if [[ "$flag" == "false" ]];

then

handleLastModify $fName

#echo "can removing file"

#rm $fName

fi  

        fi

}

handleLastModify(){

flName=$1

nowTime=$(date +%s)

((limit=$lastModify*86400))

eval `stat $flName | grep Change|awk '{print "changeDate="$2}'`

#echo $flName

changeTime=`date -d "$changeDate" +%s`

((marginTime=$nowTime-$changeTime))

if (($marginTime > $limit)); then

#rm $flName

echo "delete file .....changeDate= "$changeDate"...fileName ="$flName

fi

}

#handleLastModify /home/wusx/test/fds/fdfd

dirFile=$1

cat $dirFile | while read line

do

eval ` echo $line | awk -F ' ' '{print $1}' | awk -F '=' '{print "dir="$2}' `

eval ` echo $line | awk -F 'lastModify ' '{print $2}' | awk -F '}' '{print "lastModify="$1}' `

eval ` echo $line | awk -F '(' '{print $2}' | awk -F ')' '{print "days="$1}' `

ArrDay=(`echo $days | awk -F ' ' '{print $0}'`)

if [ -z $lastModify ];then

lastModify=7

fi

if [ -z $ArrDay ];then

ArrDay=(1 15)

fi

#echo ${#ArrDay[*]}

#echo $lastModify

if [ ! -d $dir ]; then

echo $dir "doesn't exists!" 

#exit

#continue

else

      handleDir $dir

#continue

fi

done

#A=(12 29 1 2 3 )

#echo ${#A[*]}


================================================ 附:目录列表文件 dirList dir=/home/wusx/workspace/aoes/free/lib keep={dayOfMonth ("1 4 15") lastModify 7} dir=/u02/site2 dir=/home/wusx/workspace/TranslateSiteManager dir=/u01 dir=/home/wusx/workspace/TranslateSiteManager/src keep={lastModify 7} dir=/home/wusx/workspace/TranslateSiteManager/src keep={dayOfMonth ("26")}

猜你喜欢

转载自wushexin.iteye.com/blog/798271