功能 change file names for a group of files
Script f1
 for i in Image*.jpg
 do
 mv $i nccu$i
 done
解釋 這個 script 將以檔名為 Image 開頭的 JPG 影像檔全部更改檔名,在 原檔名之前加上"nccu"字串。 當然,如果嫌檔名太長的話,可以加幾個指令,可以做得更好。
如果要將數位相機照得的一堆影像檔改個較有意義的檔名時, 這非常好用。

 

功能 change file names for a group of files
Script f2
  ls | sed 's/..*/mv & &/' > script
  vi  script
  sh script
  1   列出所有要改的檔案
  2   match to 任意字串
每一個檔案名都符合條件
  3   將 2 所找到的字串,填入於此,
對應於一個 fname 的檔名,sed 的指令為 s/fname/mv fname fname/
  4 & 5   ls 得到的檔名,成為搜尋的字串,進而成為替代字串
解釋這個 script 比較general, 它是產生如下的編輯指令
mv <oldfilename> <oldfilename>
再叫出 vi 編輯器讓使用者自己將 第二個 <oldfilename> 改成 新檔名,如此製造一個更改檔名的 shell script, 最後再叫出 shell 來執行這個 script。 讀者可自行將vi 取代為自己喜歡的編輯器。

 

功能 將 *.txt 改成 *.csv
Script f3
for i in *.txt
do
    mv $i `basename $i .txt`.csv
done
  1   利用 basename 去掉 $i 字串最後的 .txt
  2   取得 basename 執行結果
  3   將字串 .csv 向前黏上 2 的結果而造出新檔名
Script f3a
for i in *.txt
do
    mv $i ${i%.txt}.csv
done
  1   變數 $i 在展開時,%.txt 可以去掉最後的 .txt
  2   將字串 .csv 向前黏上 1 的結果
Script f3b
for i in *.txt
do
    mv $i ${i%.*}.csv
done
  1   變數 $i 在展開時,%.* 可以去掉最後的 .txt
  2   將字串 .csv 向前黏上 2 的結果

 

功能 將 nccu.* 改成 NCCU.*
Script f4
for i in nccu.*
do
    tailname=`echo $i |  sed -e 's/^nccu\.//'`
    mv $i NCCU.$tailname
done
  1   展開 $i 送給 sed 處理
  2   match to 字串的起始
  3   保護 . 以免 sed 將其視為特殊符號
  4   保護 sed 的指令,不受干擾,增加可讀性
  5   取得執行結果,成為檔案去掉 nccu. 後的剩餘字串
Script f4a
for i in nccu.*
do
    mv $i NCCU.${i#nccu.}
done
  1   字串 NCCU. 作為新檔名的起始
  2   變數 $i 展開時,將最前面的 nccu. 去除,將剩餘字串 向前黏上 NCCU. 得到新檔名
Script f4b
for i in nccu.*
do
    mv $i NCCU.${i#*.}
done
  1   字串 NCCU. 作為新檔名的起始
  2   變數 $i 展開時,將最前面的 *. 去除,剩餘字串 之前黏上 NCCU. 得到新檔名

 

功能 rename all files in the currect directory to the lower case
Script f5
for file in *
do
        lcfile=`echo $file | tr "[A-Z]" "[a-z]"`
        mv $file $lcfile
done
解釋

  1   展開 $file 供給 tr 去轉換
  2   tr 將展開的字串轉成小寫(lower case)
  3   取得轉換結果成為新檔名,放入變數 lcfile

Web Page Copyright: 國立政治大學資訊科學系 連耀南 lien@cherry.cs.nccu.edu.tw  filename.htm,  Fri Feb 28 16:24:53 CST 2014