我有一堆 Windows 掃描文件,例如Image.png
、Image (2).png
、...
Image (19).png
。
我需要將它們重新命名為,Image01.png
...
Image19.png
這樣我就可以將它們扔到imagemagick
轉換命令中,以便將它們按順序分頁到輸出 pdf 中。
這是我最終使用的命令:
ls * | awk '{print "mv \""$0"\" \"2"$0"2\"" }' | sed -e 's/2Image (/Image0/' | sed -e 's/).png2/.png/' | sed -e 's/[0-9]\([0-9][0-9]\)/\1/' | sed -e 's/2Image.png2/Image01.png/' | sh
這是可行的,但是有一種更簡潔的方法可以做到這一點,它不涉及使用骯髒/有缺陷的佔位符,例如插入隨機2
字元來使重命名工作。
答案1
rename 's/^Image\.png$/Image01.png/ || s/^Image\s+\((\d+)\)\.png$/sprintf "%s%02d.png", "Image", $1/e' *.png
方法
- 該
rename
實用程式是您場景中的最佳選擇。它的工作模型如下:取得檔案名稱清單並對Perl
每個檔案名稱套用有效的轉換,轉換後的結果將成為檔案名稱的新名稱。 - s/^Image.png$/Image(01).png/ => 這是用來處理 Image.png 檔案。
- s/^Image\s+((\d+)).png$/ => 匹配以Image 開頭的檔名,然後是任意數量的一個或多個空格,後面跟著一個文字左括號(以及一個或多個數字\ d+ 和一個右括號)並以 .png 結尾。
答案2
由於您知道檔案被呼叫Image.png
並且Image (2).png
雖然為Image (19).png
,所以不需要正規表示式:
mv Image.png Image01.png
for i in {2..19}; do
zi=$( printf '%02d' "$i" )
mv "Image ($i).png" "Image$zi.png"
done
$zi
將是 的零填充的兩個字元寬整數版本$i
。