批量改名的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 循環 + 組合命令處理”的思路來實現文件批量重命名滴。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM