怎麼用shell批次編號修改檔名 [論壇 - Ubuntu 與工具程式及軟體推薦]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



怎麼用shell批次編號修改檔名
會員五級
註冊日期:
2008/6/15 2:56
所屬群組:
已註冊使用者
等級: 38
HP : 0 / 945
MP : 757 / 38514
EXP: 81
離線
請問,如果是以下檔名,要修改成編號.jpg,也就是01..........xx.jpg不知道要怎麼改?有100多個檔案rename不會用xd
00080_heavensbelow_1680x1050.jpg 00164_volcaniccoast_1680x1050.jpg
00084_amethyst_1680x1050.jpg 00169_foreststream_1680x1050.jpg
00099_manaisland_1680x1050.jpg 00170_waterfall_1680x1050.jpg
00107_tokyoatnight_1680x1050.jpg 00191_mtdoom_1680x1050.jpg
00108_hakonemine_1680x1050.jpg 00199_africanlandscape_1680x1050.jpg
00123_floridamorning_1680x1050.jpg 00201_lakejipe_1680x1050.jpg
00138_stjohncliff_1680x1050.jpg 00221_connecticutriver_1680x1050.jpg
00147_sealion_1680x1050.jpg 00230_mountainpeak_1680x1050.jpg
00148_pacificsunset_1680x1050.jpg
00152_tulum_1680x1050.jpg
00162_maui_1680x1050.jpg

2009/2/25 9:13
應用擴展 工具箱
回覆: 怎麼用shell批次編號修改檔名
會員二級
註冊日期:
2005/11/3 11:48
所屬群組:
已註冊使用者
等級: 5
HP : 0 / 124
MP : 17 / 6022
EXP: 97
離線
試試 krename ,支援蠻多種規則的

2009/2/25 9:17
應用擴展 工具箱
z
回覆: 怎麼用shell批次編號修改檔名
Anon:z
寫 shell script 去處理

參考看看:

rename-jpg.sh
#!/bin/sh

# 調查目前目錄所有 jpg 檔
# 將檔名(取 ls -l 輸出結果的第9字串)存到 /tmp/rename.tmp
ls -l *.jpg | awk '{print $9}' > /tmp/rename.tmp


# 迴圈記數初始化歸零
loopTimes=0

# 依序讀入剛剛儲存的 jpg 檔名清單檔
# 迴圈跑一次,就讀取一行(即原檔名)
# 更名為從 001.jpg 開始
while read inputline
do
  #  迴圈記數+1
  loopTimes=`expr $loopTimes + 1`

  # 原先檔名,就是 inputline 讀進來的資料
  oldName="$inputline"

  # 新檔名(編號),即是迴圈數
  # 但是迴圈數直接當檔名並不美觀,前面給予補 0
  # 這邊假設總圖片檔量低於 999 個,編號從 001.jpg ~ 999.jpg
  # 如果迴圈數小於 10,新檔名前面補 2 個 0
  if [ $loopTimes -lt 10 ] ;then
    newName="00$loopTimes.jpg"
  # 否則如果迴圈數小於 100,新檔名前面補 1 個 0
  elif [ $loopTimes -lt 100 ] ;then
    newName="0$loopTimes.jpg"
  # 其餘狀況(迴圈數大於等於 100),迴圈數就是新檔名
    newName="loopTimes.jpg"
  fi

  # debug 用,僅顯示,不更名
  #echo "舊檔名: $oldName 新檔名:$newName"

  # 進行實際更名
  mv "$oldName" "$newName"
done < /tmp/rename.tmp

echo
echo "更名處理完畢!!"
echo


將這個 shell script 檔,放在和圖片檔同目錄

給於執行權限
chmod +x rename-jpg.sh

執行:
./rename-jpg.sh

一執行就會改喔,無法還原(無此功能),建議先備份。或修改一下程式碼,將 debug 那邊註解取消,實際更名那行註解起來,先預覽結果,滿意再更名。


原理:
1.先 ls -l 調查目錄中所有 jpg 檔名,存成一個純文字檔。
2.使用迴圈 + inputline 方法,依序讀入剛存的檔名清單。每次讀進來的是舊檔名,更名成新檔名,這樣就 ok 了。

2009/2/25 10:14 | 7ab5d 1b103 42c8a 3099a
應用擴展 工具箱
z
回覆: 怎麼用shell批次編號修改檔名
Anon:z
更正:

發現上面程式碼有錯,少一個 else

# 其餘狀況(迴圈數大於等於 100),迴圈數就是新檔名
  else
    newName="loopTimes.jpg"
  fi

2009/2/25 10:19 | 7ab5d 1b103 42c8a 3099a
應用擴展 工具箱
回覆: 怎麼用shell批次編號修改檔名
會員四級
註冊日期:
2007/12/28 15:31
所屬群組:
已註冊使用者
等級: 19
HP : 0 / 454
MP : 142 / 19135
EXP: 17
離線
建議將

ls -l *.jpg | awk '{print $9}' > /tmp/rename.tmp

改為

ls -l *.jpg | awk '{print $8}' > /tmp/rename.tmp

檔名字串在 $8

2009/2/25 10:41
應用擴展 工具箱
回覆: 怎麼用shell批次編號修改檔名
會員五級
註冊日期:
2008/6/15 2:56
所屬群組:
已註冊使用者
等級: 38
HP : 0 / 945
MP : 757 / 38514
EXP: 81
離線
謝謝兩位可以用了,不過檔案大於100後面的檔名變成loopTimes.jpg了
舊檔名: 00797_deadcalm_1680x1050.jpg 新檔名:098.jpg
舊檔名: 00798_bigrockdeniabeachspain_1680x1050.jpg 新檔名:099.jpg
舊檔名: 00800_falsecreekatdusk_1680x1050.jpg 新檔名:loopTimes.jpg
舊檔名: 00803_statepark_1680x1050.jpg 新檔名:loopTimes.jpg

後來我改成 elif [ $loopTimes -lt 500 ] ;then就正常了,我是亂亂改啦不會寫XD

if [ $loopTimes -lt 10 ] ;then
newName="00$loopTimes.jpg"
# 否則如果迴圈數小於 100,新檔名前面補 1 個 0
elif [ $loopTimes -lt 500 ] ;then
newName="0$loopTimes.jpg"
# 其餘狀況(迴圈數大於等於 100),迴圈數就是新檔名
else
newName="loopTimes.jpg"
fi

舊檔名: 00797_deadcalm_1680x1050.jpg 新檔名:098.jpg
舊檔名: 00798_bigrockdeniabeachspain_1680x1050.jpg 新檔名:099.jpg
舊檔名: 00800_falsecreekatdusk_1680x1050.jpg 新檔名:0100.jpg
舊檔名: 00803_statepark_1680x1050.jpg 新檔名:0101.jpg

2009/2/25 12:33
應用擴展 工具箱
回覆: 怎麼用shell批次編號修改檔名
會員五級
註冊日期:
2008/10/7 21:19
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 896
MP : 661 / 35698
EXP: 85
離線
hepha 寫到:
謝謝兩位可以用了,不過檔案大於100後面的檔名變成loopTimes.jpg了

應該是這裡出錯了:
# 其餘狀況(迴圈數大於等於 100),迴圈數就是新檔名
  else
    newName="$loopTimes.jpg"
  fi

2009/2/25 13:02
I′m UGP
應用擴展 工具箱
回覆: 怎麼用shell批次編號修改檔名
會員五級
註冊日期:
2008/6/15 2:56
所屬群組:
已註冊使用者
等級: 38
HP : 0 / 945
MP : 757 / 38514
EXP: 81
離線
UGP 寫到:
hepha 寫到:
謝謝兩位可以用了,不過檔案大於100後面的檔名變成loopTimes.jpg了

應該是這裡出錯了:
# 其餘狀況(迴圈數大於等於 100),迴圈數就是新檔名
  else
    newName="$loopTimes.jpg"
  fi


恩,可以囉!謝謝

2009/2/25 23:02
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.