Skip to Content

一次性大量更改檔名

因為使用了 gallery 來做相片的管理,許多先前由數位相機抓出來的檔案名稱都會彼此重複,偏偏這些重複檔名的檔案卻有極大的可能性需要放置到同一相簿裏,此時便需要將檔案給重新命名過,才不至於造成不便或是發生不幸事件。

但在非圖形操作界面中,是沒有批次改檔名這一碼子事的,想要批次改檔名這麼 lowin 的事件,可以,煩請自行寫個 shell script 來運作,不要期待有哪位大俠會慈悲心大開,專程為你寫出這個一個小指令程式來,就算真的有這麼位大俠的存在,那也要能有那個機緣能遇到他老人家不是嗎 ^_*

所謂靠山山倒,在說了,若真要等到那雲深不知處的大俠老人家出現,我看黃花菜也都涼了不知幾回了,所幸不才也還算小懂 shell script 的撰寫,再加上時間上也滿緊迫的,等不及那大俠老人家的出現了,所以就自己寫了個小小 shell script 來將硬碟中四處亂擺的數位照片檔名批次更改,再透過 gallery 的本地伺服器上傳的功能,一次性的解決檔名問題,免得到時己將照片上載到 gallery 之後,還得一張一張的變更檔名,那可真不是人幹的事喲……

#!/bin/sh
A=0
if [ $# -gt 0 ];then
  for I in * ;do
    if [ -f "$I" ];then
      A=$A
      B=`printf "%03d" "$A"`
      A=`expr $A + 1`
      #echo  $I "-> $1_$B.jpg"
      mv $I "$1_$B.jpg"
    fi
  done
else
  echo "use: $0 lead-word"
  echo "exp: $0 family"
fi

使用前請注意到,因此 shell script 並未做任何檔案格式的偵測,所以只要所在的工作目錄下,除了子目錄外,所有的檔案都會被改成 xxx_yyy.jpg 的檔名模式,所以使用前請確認要批次改檔名的目錄所在中的所有檔案都是 jpg 格式的圖檔,或是自行修正 script 的內容。
或許日後想到時,會將 script 給完整化吧?
另外,因是採用 sh 的 shell,應該不存在 OS 的問題,所以雖然只在 FreeBSD 上測試過,但 Linux 也該能執行無誤才是。
底下是使用方法︰
exp:
host% yourname.sh bird
get:
DSCP001.JPG -> bird_001.jpg
DSCP002.JPG -> bird_002.jpg


個性簽名

沒有最好,只有更好!!