当前位置: 代码迷 >> Solaris >> 们,请问一个简单的UNIX shell脚本有关问题
  详细解决方案

们,请问一个简单的UNIX shell脚本有关问题

热度:1025   发布时间:2013-02-26 00:00:00.0
大虾们,请教一个简单的UNIX shell脚本问题
我在Saloris10下写了个shell脚本,是k shell开发的, 不是b shell,需求很简单:
在一个目录下有一批文件,文件名规则是: 
ok.Z_US_PO_当前时间.xml
比如:ok.Z_US_PO_20120830220815.xml ,ok.Z_US_PO_20120829060522.xml , ok.Z_US_PO_20120828210315.xml

需要将这样的文件(在同一目录下,我放在/export/home/webm/test/exp下)批量改成 Z_US_PO_20120830220815.xml.ok这种格式,只是把ok的位置换,但我UNIX SHELL刚入门,很菜,写了一个脚本一直调试不好,现请大虾们帮忙,急!谢谢啦,脚本如下:
##############################################################
#!/bin/bash
cd /export/home/webm/test/exp
for i in *ok.a
do
  echo "Before: " $i
  mv $i ${i#*.}.${i%.*}
  echo "After: "${i#*.}.${i%.*}
done
##############################################################

------解决方案--------------------------------------------------------
cd /export/home/webm/test/exp
改前:
# ls
ok.Z_US_PO_20120830220815.xml ok.Z_US_PO_20120830220816.xml

方法1:
ls |awk -F"." '{system("mv "$0" "$2"."$3"."$1)}'
方法2:
ls |sed -n 's/\(ok\).\(.*\)/mv & \2.\1/e'

改后:
# ls
Z_US_PO_20120830220815.xml.ok Z_US_PO_20120830220816.xml.ok
可以根据实际改改
------解决方案--------------------------------------------------------
探讨

谢谢大虾,但我在执行你提供的2种方法的时候,都出现问题,我的是k shell
方法1:
ls |awk -F"." '{system("mv "$0" "$2"."$3"."$1)}'
我先cd /export/home/webm/test/exp
然后执行这个命令后,发现没有任何提示,应该是执行成功,但我再ls -ltr,发现原来的文件ok.Z_US_PO_20120830220815……

------解决方案--------------------------------------------------------
for i in `ls|grep ok\..*\.xml`
do
tar_name=${i#*.}.${i%%.*} 
mv $i $tar_name 
done
  相关解决方案