批量改名的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的行。
其他例子:
do
newfile =`echo $i | sed 's/^./q/'`
mv $file $newfile
done
说到底就是用“for 循环 + 组合命令处理”的思路来实现文件批量重命名滴。