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[*]}
?