当前位置: 技术问答>linux和unix
大虾们,请教一个简单的UNIX shell脚本问题
来源: 互联网 发布时间:2017-03-14
本文导语: 我在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_2012082...
我在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
##############################################################
在一个目录下有一批文件,文件名规则是:
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
可以根据实际改改
改前:
# 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
可以根据实际改改
|
bash
你看下k shell下有木有awk,你就用awk那条试试。俺没k shell环境
|
for i in `ls|grep ok..*.xml`
do
tar_name=${i#*.}.${i%%.*}
mv $i $tar_name
done
do
tar_name=${i#*.}.${i%%.*}
mv $i $tar_name
done