使用bash:
for i in *; do if [[ $i =~ (image_)([0-9]{1,2})(\.jpg) ]]; then printf -v num "%03d" "${BASH_REMATCH[2]}"; echo mv -v "$i" "${BASH_REMATCH[1]}${num}${BASH_REMATCH[3]}"; fi; done
如果一切正常,删除echo
。
测试与那些文件名的目录:
image_100.jpg
image_101.jpg
image_10.jpg
image_11.jpg
image_1.jpg
image_2.jpg
image_334.jpg
image_335.jpg
image_3.jpg
创建的命令:
mv -v image_10.jpg image_010.jpg
mv -v image_11.jpg image_011.jpg
mv -v image_1.jpg image_001.jpg
mv -v image_2.jpg image_002.jpg
mv -v image_3.jpg image_003.jpg
结果:
image_001.jpg
image_002.jpg
image_003.jpg
image_010.jpg
image_011.jpg
image_100.jpg
image_101.jpg
image_334.jpg
image_335.jpg
也许你的工具,只要使用顺序给出?例如,如果您将它作为'sometool image * .jpg'调用,那么您可以改为'sometool image_ {1..335} .jpg'。 –
http://stackoverflow.com/questions/9896070/pad-numerical-values-in-filename-with-three-digit-value-using-sed – bishop
@thatotherguy没有工具只是期望工作目录充满了有序images:( – sweiler