使用 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 修改 檔案名稱〉中有 4 則留言

  1. jumbler表示:

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

  2. Tsung表示:

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

  3. 梅西表示:

    請問若是資料夾要補0,怎麼做??? 好讓每個資料夾數字名稱長短補整齊。
    比如說
    10021B
    794102C

    補成這樣

    000010021B
    000794102C

Tsung 發表迴響 取消回覆

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