免费注册 查看新帖 |

Chinaunix

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

求SHELL [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-09-11 10:06 |只看该作者
原帖由 zhangshebao 于 2008-9-10 23:27 发表
BUFLEN=50
#缓冲区大小,实用环境可调大,2000至50000
find . -type f -name '*_????????*.????.del' -print|awk -F_ '
$NF

这个感觉好像比前面几个复杂多了,那这样写有什么好处吗?

论坛徽章:
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
12 [报告]
发表于 2008-09-11 10:46 |只看该作者
LZ的文件以时间命名。如果文件的时间戳与文件名称一致,那维护起来就简单得多。

论坛徽章:
0
13 [报告]
发表于 2008-09-11 11:06 |只看该作者
请教以上几位,这样写不行吗?为啥最后又用管道?
find . -type f -name '*.del' | awk -F_ '{if(substr($2,1,<2008090 rm -rf $0}

论坛徽章:
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
14 [报告]
发表于 2008-09-11 11:13 |只看该作者
原帖由 源方 于 2008-9-11 11:06 发表
请教以上几位,这样写不行吗?为啥最后又用管道?
find . -type f -name '*.del' | awk -F_ '{if(substr($2,1,


这样不行吧,反正我的awk是不行了。

论坛徽章:
0
15 [报告]
发表于 2008-09-11 11:23 |只看该作者
原帖由 源方 于 2008-9-11 11:06 发表
请教以上几位,这样写不行吗?为啥最后又用管道?
find . -type f -name '*.del' | awk -F_ '{if(substr($2,1,


在awk内部,它是不会识别rm这个命令的

论坛徽章:
0
16 [报告]
发表于 2008-09-11 11:28 |只看该作者
  1. find . -type f -name '*.del' | awk -F_ '{if(substr($2,1,8)<20080908) system("rm -rf  " $0)}'
复制代码

论坛徽章:
0
17 [报告]
发表于 2008-09-11 12:26 |只看该作者
原帖由 aboy11 于 2008-9-11 11:23 发表


在awk内部,它是不会识别rm这个命令的

大概使用shell有两种语法:

awk output 指令 | "Shell 接受的命令"
"Shell 接受的命令" | awk input 指令

另外就是使用system函数了

论坛徽章:
0
18 [报告]
发表于 2008-09-11 12:29 |只看该作者
原帖由 merlin852 于 2008-9-11 11:28 发表
find . -type f -name '*.del' | awk -F_ '{if(substr($2,1,

不知道用system效率会不会低一些?因为每行都要调用一次这个函数。通过管道是一批一批传递的,是不是快些?

论坛徽章:
0
19 [报告]
发表于 2008-09-11 12:42 |只看该作者

回复 #13 源方 的帖子

这样写不行的,你可以自己去试一下

论坛徽章:
0
20 [报告]
发表于 2008-09-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 [ $base -lt $2 ] ; then rm  $i ; fi
done
这种方法在linux上可以用,但是在unix上用不了,在base::8这里好像出错
方法2:
find . -type f -name '*.del' | awk -F_ '{if(substr($NF,1,<2008090print "rm -rf "$0}' | sh这种方法可以用,但是我把它改成放在一个脚本rmShell.sh里
#!/bin/sh
temp=$2
echo "temp:"$temp
find $1 -type f| awk -F_ 'if(substr($NF,1,<temp)print "rm -rf "$0}' | sh
然后运行时用rmFile.sh [文件路径] 20080902    这样的方式运行,但是运行时还是有问题,就是substr($NF,1,<temp,这awk好像不能识别temp,请问大家一下,有什么好方法吗?

[ 本帖最后由 huangbt_unix 于 2008-9-11 12:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP