当前位置: 技术问答>linux和unix
求unix中批量修改文件名脚本
来源: 互联网 发布时间:2016-03-08
本文导语: 文件名如下: LZGG0320000207.pik.tar LZGG0320000214.pik.tar.20080214 LZGG0320000222.pik.tar LZGG0320000229.pik.tar.20080229 LZGG0320000207.pik.tar.20080207 LZGG0320000215.pik.tar LZGG0320000222.pik.tar.20080222 LZGG0320000208.pik....
文件名如下:
LZGG0320000207.pik.tar
LZGG0320000214.pik.tar.20080214
LZGG0320000222.pik.tar
LZGG0320000229.pik.tar.20080229
LZGG0320000207.pik.tar.20080207
LZGG0320000215.pik.tar
LZGG0320000222.pik.tar.20080222
LZGG0320000208.pik.tar
LZGG0320000215.pik.tar.20080215
LZGG0320000223.pik.tar
修改规则:
1.将文件名中2000修改为2008;
2.只修改 .tar文件,后面带日期的文件不改.
LZGG0320000207.pik.tar
LZGG0320000214.pik.tar.20080214
LZGG0320000222.pik.tar
LZGG0320000229.pik.tar.20080229
LZGG0320000207.pik.tar.20080207
LZGG0320000215.pik.tar
LZGG0320000222.pik.tar.20080222
LZGG0320000208.pik.tar
LZGG0320000215.pik.tar.20080215
LZGG0320000223.pik.tar
修改规则:
1.将文件名中2000修改为2008;
2.只修改 .tar文件,后面带日期的文件不改.
|
ls *.tar|while read name
do
a=`echo $name|cut -c 1-6`
b=`echo $name|cut -c 11-40`
mv $name $a2008$b
done
do
a=`echo $name|cut -c 1-6`
b=`echo $name|cut -c 11-40`
mv $name $a2008$b
done
|
你的是unix还是linux?如果是linux那rename没错
如果是unix要么写脚本,要么装一个util-linux的软件包,rename就是这个包里的
就算你懒得下软件包,也极其简单啊
find -name "*2000*.pik.tar" -exec sh -c "mv '{}' $(echo '{}' | sed 's/2000/2008/')" ';'
如果你怕有错,就先备份一下原来的文件
声明一下,没用过比较纯的unix,一直都是在linux下工作,不知道unix里有没有find,sed这样的工具,因为find,sed都是GNU的。
如果是unix要么写脚本,要么装一个util-linux的软件包,rename就是这个包里的
就算你懒得下软件包,也极其简单啊
find -name "*2000*.pik.tar" -exec sh -c "mv '{}' $(echo '{}' | sed 's/2000/2008/')" ';'
如果你怕有错,就先备份一下原来的文件
声明一下,没用过比较纯的unix,一直都是在linux下工作,不知道unix里有没有find,sed这样的工具,因为find,sed都是GNU的。
|
楼上的写法学习了一下,以下是AIX5L中POSIX sh的案例(比较通用):
#!/bin/sh
for fname in `ls *.tar`
do
dename=`echo $fname|sed 's/2000/2008/'`
mv $fname $dename
done
#!/bin/sh
for fname in `ls *.tar`
do
dename=`echo $fname|sed 's/2000/2008/'`
mv $fname $dename
done