免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123456
最近访问板块 发新帖
楼主: 雨梦—新生
打印 上一主题 下一主题

性命忧关!!!!拜托各位高手!!!急!!!!! [复制链接]

论坛徽章:
0
51 [报告]
发表于 2004-11-09 13:08 |只看该作者

性命忧关!!!!拜托各位高手!!!急!!!!!

#! bin/ksh
           read path time;
           find $path -name "*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*" |
           while read filename;
                 do   num=1;
                      while [ $filename != " " ];
                            do   num=` expr $num + 1 `;
                                 dir=` echo $filename | cut -f$num -d/ `;
                                 if [ -z $dir ];
                                      then break;
                                 fi;
                       done;  
                       num=` expr $num - 1 `;
                       dir=` echo $filename | cut -f$num -d/ `;
                       date=` echo $dir | cut -c1-8 `;
                       echo $date > /tmp/dood;
                       test ` grep "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" /tmp/dood `;
                       aaa=` echo $? `;
                       num=1;
                       while [ $aaa = 1 ];
                               do    num=` expr $num + 1 `;
                                     numb=` expr $num + 7 `;
                                     date=` echo $dir | cut -c$num-$numb `;
                                     echo $date > /tmp/dood;
                                     test ` grep "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" /tmp/dood `;
                                     bbb=` echo $? `;
                                     if [ $bbb = 0 ];
                                          then break;
                                     fi;
                        done;
                        if [ $date -lt $time ];
                             then   year=` expr $date \/ 10000 `;
                                    mon1=` expr $date \/ 100 `;
                                    mon2=` expr $year \* 100 `;
                                    mon=` expr $mon1 - $mon2 `;
                                    day=` expr $date - $mon1 \* 100 `;
                                    years=` expr $year \/ 4 `;
                                    yearss=` expr $years \* 4 `;
                                    if [ $year -gt 0 -a $mon -lt 13 -a $mon -gt 0 -a $day -lt 32 -a $day -gt 0 ];
                                         then   for i in 4 6 9 11;
                                                    do    if [ $mon = $i ];
                                                               then   if [ $day -lt 31 ];
                                                                           then  rm $filename;
                                                                      fi;
                                                          fi;
                                                 done;
                                                 for i in 1 3 5 7 8 10 12;
                                                     do   if [ $mon = $i ];
                                                               then   if [ $day -lt 32 ];
                                                                           then   rm $filename;
                                                                      fi;
                                                          fi;
                                                 done;
                                         else   if [ $mon = 2 ];
                                                     then  if [ $year = $yearss ];
                                                                then   if [ $day -lt 30 ];
                                                                            then   rm $filename;
                                                                       fi;
                                                                else   if [ $day -lt 29 ];
                                                                            then   rm $filename;
                                                                       fi;
                                                           fi;
                                                fi;
                                    fi;
                          fi;
            

经试验,是成功的!!不知大家能否看懂,比较不正规吧!!!!

希望大家能够给与改进!!!

不要怨我,我真的还没搞清楚呢!!不过,肯定是shell!

论坛徽章:
0
52 [报告]
发表于 2004-11-09 13:23 |只看该作者

性命忧关!!!!拜托各位高手!!!急!!!!!

哪里是判断类似
444322004102332fda.kkk
这种文件名的?这也算合法吧,按前面你的要求应该也要判断出这种文件名吧?
小弟没找到这部分判断,望指教

论坛徽章:
0
53 [报告]
发表于 2004-11-09 18:14 |只看该作者

性命忧关!!!!拜托各位高手!!!急!!!!!

#!/bin/bash

isdigit() {
  if [ $1 '<' '0' -o $1 '>' '9' ]; then return 1; else return 0; fi
}

lastdayofmonth() {
  year=$1
  mon=$2
  if [ $mon -eq 1 -o $mon -eq 3 -o $mon -eq 5 -o $mon -eq 7 -o $mon -eq 8 -o $mon -eq 10 -o $mon -eq 12 ]; then
    echo 31
  elif [ $mon -ne 2 ]; then
    echo 30
  elif [ $((year%400)) -eq 0 ]; then
    echo 29
  elif [ $((year%4)) -ne 0 ]; then
    echo 28
  elif [ $((year%100)) -ne 0 ]; then
    echo 29
  else
    echo 28
  fi
}

validate() {
  day=$1
  year=`echo $day|cut -c1-4`
  mon=`echo $day|cut -c5-6`
  day=`echo $day|cut -c7-8`
  if [ $year -lt 1900 -o $year -gt 3000 ]; then return 1; fi
  if [ $mon -lt 1 -o $mon -gt 12 ]; then return 1; fi
  if [ $day -lt 1 -o $day -gt `lastdayofmonth $year $mon` ]; then return 1; fi
  return 0
}

getfilename() {
  fullname=$1
  while true; do
    subdir=`echo $fullname|cut -f2- -s -d'/'`
    if [ -z "$subdir" ]; then break; fi
    fullname=$subdir
  done
  echo $fullname
}

getdate() {
  basename=`getfilename $1`
  pos=1
  counter=0
  while true; do
    ch=`echo $basename|cut -c$pos`
    pos=$((pos+1))
    if [ -z "$ch" ]; then break; fi
    isdigit $ch
    if [ $? -ne 0 ]; then
       counter=0
       continue;
    fi
    counter=$((counter+1))
    if [ $counter -lt 8 ]; then continue; fi
    fileday=`echo $basename|cut -c$((pos-)-$((pos-1))`
    validate $fileday
    if [ $? -eq 0 ]; then
      echo $fileday
      return 0
    fi
  done
}

checkdate() {
  filename=$1
  lastday=$2
  day=`getdate $filename`
  printf "=%s." "$day"
  if [ -z "$day" ]; then
    return 1
  elif [ "$day" -lt "$lastday" ]; then
    return 0
  else
    return 1
  fi
}

checkandremove() {
  filename=$1
  lastday=$2
  printf "\ncheckandremove %s %s..." $filename $time
#  if [ ! -f "$filename" ]; then
#    return 1
#  fi
  checkdate $filename $lastday
  if [ $? -eq 0 ]; then
    echo "\nremove $filename..."
    rm $filename
    return 0
  else
    return 1
  fi
}

if [ -z "$1" ]; then
echo "Input path:"
read path
else
path=$1
fi

if [ -z "$2" ]; then
echo "Input date:"
read time
else
time=$2
fi

validate $time
if [ $? -ne 0 ]; then
  echo "Error Date Format : $time"
  exit 1
fi

#find $path > /tmp/1
#echo "find complete"
while read filename; do
checkandremove $filename $time
done < /tmp/1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP