免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell 求SHELL
最近访问板块 发新帖
楼主: huangbt_unix
打印 上一主题 下一主题

求SHELL [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-09-11 12:53 |只看该作者
而且,用for语句的时候,文件太多时,它提示内存空间不足,出错不能运行

论坛徽章:
0
22 [报告]
发表于 2008-09-11 13:01 |只看该作者
原帖由 huangbt_unix 于 2008-9-11 12:49 发表
非常感谢大家的赐教,我这里总结一下,
方法1:
./torm.sh 20080908

torm.sh:
#!/bin/sh
for i in $(find $1 -type f -name "*.del")
do
  base=${i##*/}
  base=${base##*_}
  base=${base::8}
  IF  ...


"'$temp'"

论坛徽章:
0
23 [报告]
发表于 2008-09-11 13:09 |只看该作者
也不行啊.....

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
24 [报告]
发表于 2008-09-11 13:28 |只看该作者
另一种方法:
./torm.sh 20080908

torm.sh

  1. #!/bin/bash

  2. if [ "$#" = 0 ]; then
  3.         echo "There is no input date"
  4.         echo "usage: ./torm.sh 20080908"
  5. else
  6.     find roam/ -type f -name '*.del' -execdir path/myrm.sh $1 {} \;
  7. fi
复制代码


myrm.sh

  1. #!/bin/bash

  2. base=${2##*/}
  3. base=${base#*_}
  4. # base=${base::8} 这行可以不要。
  5. if [ $base \< $1 ] ; then rm $2 ; fi
复制代码

论坛徽章:
0
25 [报告]
发表于 2008-09-11 13:28 |只看该作者
find $1 -type f| awk -v temp=$2 -F_ 'if(substr($NF,1,<temp)print "rm -rf "$0}' | sh

论坛徽章:
0
26 [报告]
发表于 2008-09-11 13:34 |只看该作者
  1. #!/bin/sh
  2. temp=$2
  3. echo "temp:"$temp
  4. find $1 -type f| awk -F_ 'if(substr($NF,1,8)<'$temp')print "rm -rf "$0}' | sh
复制代码


另见http://bbs.chinaunix.net/thread-1265068-1-2.html

论坛徽章:
0
27 [报告]
发表于 2008-09-11 13:42 |只看该作者
原帖由 merlin852 于 2008-9-11 13:28 发表
find $1 -type f| awk -v temp=$2 -F_ 'if(substr($NF,1,

find $1 -type f| awk -v temp=$2 -F_ 'if(substr($NF,1,<temp)print "rm -rf "$0}' | sh
这个是可以,不过temp=$2这个语句放在awk里,会不会每一次循环它都要运行一次啊?
我对管道的工作方式不太理解,它是找到一个文件就通过管道传给awk命令,还是全部找出来才通过管道传给awk啊?
如果是全部找出来才传给awk的话,这样会不会发生数据量太大而使管道爆掉的问题啊?

[ 本帖最后由 huangbt_unix 于 2008-9-11 14:06 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2008-09-11 13:43 |只看该作者
这样也不行吗

#!/bin/sh

read temp
find $1 -type f| awk -F_ 'if(substr($NF,1,<"'$temp'"print "rm -rf "$0}' | sh

论坛徽章:
0
29 [报告]
发表于 2008-09-11 14:05 |只看该作者
是的,不行,
不好意思啊,刚刚没注意看,有一个是可以的:
find $1 -type f| awk -v temp=$2 -F_ 'if(substr($NF,1,<temp)print "rm -rf "$0}' | sh
这个是可以,不过temp=$2这个语句放在awk里,会不会每一次循环它都要运行一次啊?
我对管道的工作方式不太理解,它是找到一个文件就通过管道传给awk命令,还是全部找出来才通过管道传给awk啊?
如果是全部找出来才传给awk的话,这样会不会发生数据量太大而使管道爆掉的问题啊?

论坛徽章:
0
30 [报告]
发表于 2008-09-11 15:45 |只看该作者
好,问题差不多解决了,就是用这种方法:
#!/bin/sh
find $1 -type f -name "*.del"| awk -v temp=$2 -F_ '{if(substr($NF,1,<temp)print "echo "$0";rm "$0}' | sh
看来china unix的高手太多了,既然这样,大家就帮我把这个shell改完美一点吧
就是有一种文件,eg. QC20080909171756_IOC_20080908591.0001.del
其中的QC表示一种文件类型,2008090909171756表示2008年09月09日17时17分56秒,
这种文件变成有两个时间,以上大家讨论的都是在匹配后面那个时间域20080908>参数,那我现在想增加条件,就是如果发现这个
文件是以QC开头的文件,那么在QC后面的时间域20080909也要>输入的参数,这样子怎么实现啊?
顺便说一下,匹配QC时最好只匹配文件名部分,而不要匹配整个路径.
这个问题我也是想了非常久啊,解决不了,把希望寄托在大家身上喽!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP