免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2004-11-03 17:12 |只看该作者

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

数据不规则,很不好处理。如果yyyymmdd的格式规则就好办了

论坛徽章:
0
12 [报告]
发表于 2004-11-03 17:49 |只看该作者

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

原帖由 "雨梦—新生" 发表:
1、文件名并不规则,除了八位连续数字,可能还包括别的!!!
2、输入的日期是否符合日期规则也需判断,如20040931就不符合标准!
3、仅指定一级目录,要找到次目录及其下级目录下的所有相关文件!!
望高手们多?.........



我想可以用CUT截取需要的日期数字
如果数字所在的位置还是无规则,那.........小弟无语

我给的程序就可以找到任意级文件,不管你有几层
麻烦你先看下程序好吗?

再麻烦你提供一下文件名的例子好吗?
我们文件名都没看到,怎么截呀

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
13 [报告]
发表于 2004-11-03 20:51 |只看该作者

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

起个好主题吧!

论坛徽章:
0
14 [报告]
发表于 2004-11-03 21:00 |只看该作者

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

原帖由 "雨梦—新生" 发表:
1、文件名并不规则,除了八位连续数字,可能还包括别的!!!
2、输入的日期是否符合日期规则也需判断,如20040931就不符合标准!
3、仅指定一级目录,要找到次目录及其下级目录下的所有相关文件!!
望高手们多?.........


shell不是万能的,处理这种问题应用C。不知寂寞烈火兄是否有办法,如果他有办法,你我又可以学一招。如果没有办法,你只能等死。

论坛徽章:
0
15 [报告]
发表于 2004-11-03 22:38 |只看该作者

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

刚才花了点时间,写一个不完善的小程序,各位可以去测试一下。

说明:
1、本程序不能对所输入的年月日是否正确进行判断,希望各位完善。
2、本程序只能删除当前目录下<包括子目录>一年以内的数据,跨年的数据不能删除。
3、文件名中年月日不作限制,aa20041101bb.txt 、a200408.txt等都可以。
4、本程序执行后,不删除文件,只显示在屏幕上。如:
rm  ./bb/abc20040503b.txt
rm ./a20040915abgcd.txt

在unix5.0.5通过:

echo ""|
nawk 'BEGIN {
                while (1)
                {
                        printf("\n\n\t请输入日期:";
                        getline  date <"/dev/tty"
                        if( length(date) != "8" || date ~/[a-z]|[A-Z]/)
                                print "输入长度不是8位或包函非数字字符!!!"
                        else
                                break
                }
        }
        {
                while (" find \.\/ -name \\*[0-9][0-9][0-9][0-9]\\* -print"|getline d){
if( substr(d, match(d, substr(date, 1, 4)), 8 )!~/[a-z]|[A-Z]/ && substr(date, 1, 6) > substr(d, match(d, substr(date, 1, 4)), 6))
                printf("rm %s\n", d)
if( substr(d, match(d, substr(date, 1, 4)), 8 )!~/[a-z]|[A-Z]/ && substr(date, 1, 6) == substr(d, match(d, substr(date, 1, 4)), 6) && substr(date, 7, 2) > substr(d, match(d, substr(date, 1, 4)) + 6, 2))
                printf("rm %s\n", d)
                 }
}'

好了,去睡觉了,明天见。

论坛徽章:
0
16 [报告]
发表于 2004-11-04 09:55 |只看该作者

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

我并不是没有努力。我刚刚接触这个东西,由于工作需要,要学习,可是老板上来就给了这么一个难题,我。。。。。。。!!!我现在已经把对时间的判断程序写了出来,可是下面的,我现在实在没办法,大家一起努力吧,只不过我想,高手们应该比我强多了!!!

论坛徽章:
0
17 [报告]
发表于 2004-11-04 10:09 |只看该作者

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

我在努力,只不过我刚开始学,由于工作需要,老板又一下就给了这么一个难题(对我来说),我。。。。。。。!!!!
我把判断日期的程序写出来了!
其实我觉得找文件不难,可以用find 命令,可是找出来后的截取、判断就比较难办一些,问题是不知道找出来的文件是在第几级下面,是不规则的,而且文件名中只是“包含”日期名,可能还有其它的一些东西,怎么把日期取出来进行比对呢?

论坛徽章:
0
18 [报告]
发表于 2004-11-04 10:39 |只看该作者

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

我一直在努力,我是刚刚开始学习,由于工作需要,老板一下子又给了这样一个题目,我。。。。。。!难哪(对我来说),所以在此请各位高手帮忙一下!!
关于对时间的判断的程序我已基本搞定。
找文件吗,也不难,用find命令就可以实现,问题是,找到文件后对它的处理是最麻烦的!首先,不知道她是在第几级目录下,其次就是不知道她的名称的组成是什么样的,如何截取出我们想要的日期信息是最难的,在之后的比较及删除也就简单多了!!!

论坛徽章:
0
19 [报告]
发表于 2004-11-04 11:02 |只看该作者

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

能找到需要的文件就简单了,就是难找阿。
找到了加个 | xargs rm -f {}
不就行了,管他在哪里。

论坛徽章:
0
20 [报告]
发表于 2004-11-04 11:06 |只看该作者

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

#!/bin/sh

process_date()
{
YEAR=`expr substr $1 1 4`
MONTH=`expr substr $1 5 2`
DAY=`expr substr $1 7 2`

CAL=`cal $MONTH $YEAR 2>/dev/null`
if [ $? -eq 0 ] && [ `echo ${CAL}|awk '{print $NF}'` -ge $DAY ];then
  echo "1"
else
  echo "0"
fi
}

find $1  -type f  2>/dev/null | while read line
do
FLAG=0

name=`basename ${line}`
list=`echo ${name}|sed 's/[^0-9]/ /g'`
  
for item in ${list}
do
   item=`echo $item|sed s/[^0-9]//g`
   while [ -n "${item}" ] && [ `expr length "${item}"` -ge 8 ] && [ $FLAG!="1" ]
   do
    subitem=`expr substr ${item} 1 8`
    FLAG=`process_date ${subitem}`   
    item=`echo ${item}|sed 's/^[0-9]//'`   
   done
done

if [ $FLAG = "1" ];then
  echo "rm $line"  
fi
done
--------------------------------------------------
用法:查找路径作为唯一参数
功能:该目录(包括各级子目录)所有文件
      可以判断日期的合法性,日期格式:yyyymmdd
        显示所有包含合法日期的文件
如:we20041324不显示  220041221456显示

测试通过linux
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP