使用 awk sprintf 修改 檔案名稱

某些圖片會是 1.jpg, 2.jpg, 10.jpg, 11.jpg, 100.jpg... 等, 使用看圖軟體看時, 總會看到 1, 10, 11, 12 ... 等, 而真正想要的順序是 1, 2, ... 到 100.

要解決此問題, 主要是要將 檔名 做下述修改:

  • 1.jpg => 001.jpg
  • 10.jpg => 010.jpg
  • 100.jpg => 100.jpg

這樣子改完就會由 001, 002, 003 ... 開始照順序囉~

 修改檔名的 Script, 有下述幾種做法: (使用 awk 的 sprintf 來做補 0 的動作)

  • ls | awk -F. '{system("mv " $0 " " sprintf("%03d.jpg", $1))}' # 更改檔名時, 附檔名一律設為 jpg (目前較常用的是這個)
  • ls | awk -F. '{system("mv " $0 " " sprintf("%03d.%3s", $1, $2))}' # 檔名和附檔名分開紀錄, 更名時附檔名維持原檔名
  • ls *.jpg | sort -n | awk '{system("mv " $0 " " sprintf("%03d.jpg", ++i))}' # 經由 sort -n 排序過, 不管檔名是什麼.
  • 註: 這些 script 執行會直接更改, 以防意外, 建議先備份一份再來執行.

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

使用 awk sprintf 修改 檔案名稱 有 2 則回應

  1. jumbler 說道:

    printf 也很好用
    e.g.
    i=9
    printf "%03" $i => 009

  2. Tsung 說道:

    printf "%03d" 9 => 009
    感恩~ 🙂

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料