您可以使用:
#!/bin/bash
glob="[0-9][0-9][0-9][0-9].jpg"
last=$(find . -maxdepth 1 -name "$glob" -print |sort -gr |grep -Pom1 '\d{4}') # or |grep -om1 '[0-9][0-9]*')
last=${last:-0}
while IFS= read -d $'\0' -r image
do
let last++
echo mv "$image" "$(printf "%04s" $last ).jpg"
done < <(find . -maxdepth 1 -name \*.jpg -a -not -name "$glob" -print0)
在哪里:
- 1st
find
找到最后使用的号码
- 从
while read
读取输出
- 第二个
find
找到所有.jpg
具有不同名称的 NNNN.jpg
- 递增和重命名
你可以改进这个
- 搜索其他类型的图像(不仅是 jpg)
- 将脚本更改为不区分大小写
- 如果图像计数超过以上将失败
9999
...所以...
脚本处于干echo
模式,满意时删除
编辑
破折号版本:
glob="[0-9][0-9][0-9][0-9].jpg"
last=$(find . -maxdepth 1 -name "$glob" -print |sort -gr |grep -Pom1 '\d{4}') # or |grep -om1 '[0-9][0-9]*')
last=${last:-0}
for image in *.jpg
do
echo "$image" | grep -q "^$glob$" && continue
#last=$((last+1)) #with leading zeroes, the numbers treated as octal... fails for 08 and such
last=$(expr $last + 1)
echo mv "$image" "$(printf "%04d" $last ).jpg"
done