批量改名的shell脚本

刚开始学习shell脚本,学习时候写过的一些脚本都是以.sh结尾的,于是想去掉这个结尾,写了个脚本,以后用着也方便。

脚本如下:

很简单。扫描当前目录,然后符合条件的改名。

1 #!/bin/bash
2 for i in *;
3 do
4 newname=`echo $i|sed 's/\.sh$//'` #.要转义
5 if [ $i != $newname ];then
6 mv $i $newname
7 fi
8 done

补充:

sed的用法。

替换:s/regexp/replacement/

regexp:

  ^锚定行的开始如:/^sed/匹配所有以sed开头的行。 

  $锚定行的结束 如:/sed$/匹配所有以sed结尾的行。

  .匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。 

  *匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 

  []匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。 

  [^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

  \(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

  &;保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

  \<;锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。

  \>;锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。

  x\{m\}重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。

  x\{m,\}重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。

  x\{m,n\}重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。

其他例子:

1、把它们的名字的第一个1个字母变为"q",其它的不变
 
 for i in `ls`; do mv -f $i `echo $i | sed 's/^./q/'`; done
或者写个脚本,显得更加清晰:
for file in `ls`
do
    newfile =`echo $i | sed 's/^./q/'`
 mv $file $newfile
done
 
2、修改前面5个字母为zhaozh
 
 for i in `ls`; do mv -f $i `echo $i | sed 's/^...../zhaozh/'`; done
 
3、修改后面5个字母为snail
 
 for i in `ls`; do mv -f $i `echo $i | sed 's/.....$/snail/'`; done
 
4、在前面添加 _hoho_
 
 for i in `ls`; do mv -f $i `echo "_hoho_"$i`; done
 
5、所有的小写字母变大写字母
 
 for i in `ls`; do mv -f $i `echo $i | tr a-z A-Z`; done

说到底就是用“for 循环 + 组合命令处理”的思路来实现文件批量重命名滴。

posted on 2012-09-11 18:31  Yiffy  阅读(3952)  评论(0编辑  收藏  举报

导航