2008年3月23日 星期日

[shell script]將數位影像檔根據拍攝日期重新命名

每次多臺相機執行完拍攝任務後, 檔案成群而且檔名或而重複或而不連號。歸檔在一個資料夾時, 無法按所有的拍照順序排列, 因此寫出下面這個 shell script 來處理這個問題。
這個shell script會在每個.jpg或.JPG檔案名稱前面附加上日期時間成為新的檔案名稱, 檔名中的英文字母全變為小寫。例如:

-原始檔名為-
-rwxrwxrwx 1 None 1847717 2008-03-23 21:07:58.000000000 +0800 DSC01621.jpg
-rwxrwxrwx 1 None 1673909 2008-03-23 21:08:14.000000000 +0800 DSC01622.jpg
-rwxrwxrwx 1 None 994588 2008-03-23 16:44:22.000000000 +0800 IMG_1570.jpg
-rwxrwxrwx 1 None 860694 2008-03-23 16:44:42.000000000 +0800 IMG_1571.jpg
-rwxrwxrwx 1 None 1121967 2008-03-23 18:40:18.000000000 +0800 IMG_1915.jpg
-rwxrwxrwx 1 None 944497 2008-03-23 16:48:28.000000000 +0800 IMG_4357.jpg

-執行後更名為-
-rwxrwxrwx 1 None 994588 2008-03-23 16:44:22.000000000 +0800 20080323_164422_img_1570.jpg
-rwxrwxrwx 1 None 860694 2008-03-23 16:44:42.000000000 +0800 20080323_164442_img_1571.jpg
-rwxrwxrwx 1 None 944497 2008-03-23 16:48:28.000000000 +0800 20080323_164828_img_4357.jpg
-rwxrwxrwx 1 None 1121967 2008-03-23 18:40:18.000000000 +0800 20080323_184018_img_1915.jpg
-rwxrwxrwx 1 None 1847717 2008-03-23 21:07:58.000000000 +0800 20080323_210758_dsc01621.jpg
-rwxrwxrwx 1 None 1673909 2008-03-23 21:08:14.000000000 +0800 20080323_210814_dsc01622.jpg

-這個shell script的指令-

#!/bin/sh

ls *.jpg *.JPG -g --time-style=full-iso > temp

cat temp | awk '{d=$5;gsub(/-/,"",d);t=$6;gsub(/:/,"",t); gsub(/.000000000/,"",t) ;oname=$8; print "mv",oname,tolower(d"_"t"_"$8)}' > renamelist.sh

sh ./renamelist.sh

rm -rf temp renamelist.sh