免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8302 | 回复: 34
打印 上一主题 下一主题

文件数过多,请高手指点一下sh脚本如何修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-08 13:51 |只看该作者 |倒序浏览
我写了一个脚本如下:
DIR1="/lbill/lbas/ric97/yhsj_format/init"
DIR2="/lbill/lbas/ric97/yhsj_format/tmp"
cd $DIR1
for i in `ls $DIR1`
do
      mv $i /lbill/lbas/ric97/yhsj_format/tmp/$i
      cd $DIR2
      uncompress $i  
done;
cd $DIR2
for j in `ls $DIR2`
do
    awk -f /lbill/lbas/ric97/yhsj_format/sh/yhsj_format.awk $j >/lbill/lbas/ric97/yhsj_format/format/$j
    mv $j /lbill/lbas/ric97/yhsj_format/bak/$j
done

------------------------------------
这个脚本的目的就是把init下面的 .Z 文件放到tmp下,然后再调用awk脚本进行转换。

我做测试发现,如果init里面只有一两个文件的话,很快就可以处理玩。如果不用解压的话,文件放到tmp下的话,都可以正常处理。
问题就出现在如果init下有很多文件的话,就会报错,如下:
mv: cannot rename in03_L_28_222323_20080424.r.L.763.Z to /lbill/lbas/ric97/yhsj_format/tmp/in03_L_28_222323_20080424.r.L.763.Z:
No such file or directory


我估计是文件数太多造成的,如何修改这个sh脚本才不会报错呢?请指点一下。系统是AIX 的。

论坛徽章:
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
2 [报告]
发表于 2008-09-08 13:56 |只看该作者

回复 #1 david993 的帖子

在第一for之前添加一行试试:
IFS=$'\n'
for ...

并且引用参数展开,如mv "si" ....

[ 本帖最后由 blackold 于 2008-9-8 13:59 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-08 14:14 |只看该作者
是文件数太多的问题吗?

论坛徽章:
0
4 [报告]
发表于 2008-09-08 17:11 |只看该作者
原帖由 blackold 于 2008-9-8 13:56 发表
在第一for之前添加一行试试:
IFS=$'\n'
for ...

并且引用参数展开,如mv "si" ....



DIR1="/lbill/lbas/ric97/yhsj_format/init"
DIR2="/lbill/lbas/ric97/yhsj_format/tmp"
cd $DIR1
IFS=$'\n'
for i in `ls $DIR1`
do
      mv $i /lbill/lbas/ric97/yhsj_format/tmp/$i
      cd $DIR2
      uncompress $i
done;
cd $DIR2
for j in `ls $DIR2`
do
    awk -f /lbill/lbas/ric97/yhsj_format/sh/yhsj_format.awk $j >/lbill/lbas/ric97/yhsj_format/format/$j
    mv $j /lbill/lbas/ric97/yhsj_format/bak/$j
done

按你说的,在第一个for 前,加了一行。测试不行。有下面报错:
/lbill/lbas/ric97/yhsj_format/i not found
it not found
awk: Cannot find or open file L.763.20080425.QC
i.

The source line number is 1.
mv: cannot rename L.763.20080425.QC
i to /lbill/lbas/ric97/yhsj_format/bak/L.763.20080425.QC
i:
No such file or directory
awk: Cannot find or open file 03_L_28_222322_20080424.r.L.763.

The source line number is 1.
mv: cannot rename 03_L_28_222322_20080424.r.L.763 to /lbill/lbas/ric97/yhsj_format/bak/03_L_28_222322_20080424.r.L.763:
No such file or directory

论坛徽章:
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
5 [报告]
发表于 2008-09-08 17:13 |只看该作者

回复 #4 david993 的帖子

你的参数展开没有按我说的引用啊。

mv "$i" /lbill/lbas/ric97/yhsj_format/tmp/"$i" 等等。

论坛徽章:
0
6 [报告]
发表于 2008-09-08 17:44 |只看该作者
首先,非常感谢各位把帮助,按照楼上的方法再测试了一下:
DIR1="/lbill/lbas/ric97/yhsj_format/init"
DIR2="/lbill/lbas/ric97/yhsj_format/tmp"
cd $DIR1
IFS=$'\n'
for i in `ls $DIR1`
do
       mv "$i" /lbill/lbas/ric97/yhsj_format/tmp/"$i"
#      mv $i /lbill/lbas/ric97/yhsj_format/tmp/$i
      cd $DIR2
      uncompress $i  
done;
cd $DIR2
for j in `ls $DIR2`
do
    awk -f /lbill/lbas/ric97/yhsj_format/sh/yhsj_format.awk $j >/lbill/lbas/ric97/yhsj_format/format/$j
    mv $j /lbill/lbas/ric97/yhsj_format/bak/$j
done


-------------还是有报错
The source line number is 1.
mv: cannot rename 03_L_28_222322_20080424.r.L.763
i to /lbill/lbas/ric97/yhsj_format/bak/03_L_28_222322_20080424.r.L.763
i:
No such file or directory
awk: Cannot find or open file 03_L_28_222323_20080424.r.L.763
i.

-------------
并且我做了一个测试:
把下面的掉用awk ,和解压都注释掉,只保留mv ,再测试的时候是没报错的,估计问题就出在解压的文件名里面,怎样可以修改一下脚本比较好呢?

论坛徽章:
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
7 [报告]
发表于 2008-09-08 17:53 |只看该作者

回复 #6 david993 的帖子

找不到文件!

不听话还有什么办法?

叫你把所有$variable都引用!

[ 本帖最后由 blackold 于 2008-9-9 09:11 编辑 ]

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
8 [报告]
发表于 2008-09-08 18:51 |只看该作者
for i in "`ls $DIR1`"
do
      mv $i /lbill/lbas/ric97/yhsj_format/tmp/$i
      cd  "$DIR2"
      
类似这样的都加上双引号试试

论坛徽章:
0
9 [报告]
发表于 2008-09-09 16:26 |只看该作者
各位高人,实在有负大家所望,做了好几个测试,还是不成功!

DIR1="/lbill/lbas/ric97/yhsj_format/init"
DIR2="/lbill/lbas/ric97/yhsj_format/tmp"
cd "$DIR1"
IFS=$'\n'
for i in "`ls $DIR1`"
do
      mv "$i" /lbill/lbas/ric97/yhsj_format/tmp/"$i"
      cd "$DIR2"
      uncompress "$i"
done;
#cd $DIR2
#for j in `ls $DIR2`
# do
#    awk -f /lbill/lbas/ric97/yhsj_format/sh/yhsj_format.awk $j >/lbill/lbas/ric97/yhsj_format/format/$j
#    mv $j /lbill/lbas/ric97/yhsj_format/bak/$j
#done

-------------------------
$ sh yhsj_format.sh
/lbill/lbas/ric97/yhsj_format/i not found
it not found
mv: cannot rename  to /lbill/lbas/ric97/yhsj_format/tmp//:
No such file or directory
.Z: No such file or directory


--------------
已经按照楼上的几位大哥所说,对变量加上引用,还是有点报错。希望各位高人,继续指点一下小弟,无限感激。

论坛徽章:
0
10 [报告]
发表于 2008-09-09 16:33 |只看该作者
原帖由 david993 于 2008-9-9 16:26 发表
各位高人,实在有负大家所望,做了好几个测试,还是不成功!

DIR1="/lbill/lbas/ric97/yhsj_format/init"
DIR2="/lbill/lbas/ric97/yhsj_format/tmp"
cd "$DIR1"
IFS=$'\n'
for i in "`ls $DIR1`"
do
...



试一下:

DIR1="/lbill/lbas/ric97/yhsj_format/init"
DIR2="/lbill/lbas/ric97/yhsj_format/tmp"
cd "$DIR1"
IFS=$'\n'
for i in "`ls $DIR1`"
do
      mv "$i" /lbill/lbas/ric97/yhsj_format/tmp/
      cd "$DIR2"
      uncompress "$i"
done;
#cd $DIR2
#for j in `ls $DIR2`
# do
#    awk -f /lbill/lbas/ric97/yhsj_format/sh/yhsj_format.awk $j >/lbill/lbas/ric97/yhsj_format/format/$j
#    mv $j /lbill/lbas/ric97/yhsj_format/bak/$j
#done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP