Re: 求助关于批量改文件的扩展名
发表于 : 2011-07-12 16:58
那是故意的....防止两次运行rename 那个,就是说多操作一次......fnan 写了:确是还能突破,谢谢提醒。不过能短多少呢?无需太执着吧。ChenFengyuan 写了:to fnan,你的bash也太长了。。。。。原来是要有+1的效果。。。。
交给perl好了。写得又短又漂亮。
ls -1|while read n;do z=${n/#*[!0-9]};mv $n ${n/%*([0-9])}$(printf ".%0${#z}d" $((${z/#*(0)}+1)));done
rename -v 's/(?<![.\d])(\d++)$/sprintf ".%0".length($1)."d",$1+1/e' *ls
a.12mkv000103 a.mkv000 a.mkv000000 a.mkv00000000004 a.mkv00002 a.mkv002 a.mkv004
ls -1|while read n;do z=${n/#*[!0-9]};mv $n ${n/%*([0-9])}$(printf ".%0${#z}d" $((${z/#*(0)}+1)));done
ls
a.12mkv.000104 a.mkv.00000000005 a.mkv.000001 a.mkv.00003 a.mkv.001 a.mkv.003 a.mkv.005
ls -1|while read n;do z=${n/#*[!0-9]};mv $n ${n/%*([0-9])}$(printf ".%0${#z}d" $((${z/#*(0)}+1)));done
ls
a.12mkv..000105 a.mkv..00000000006 a.mkv..000002 a.mkv..00004 a.mkv..002 a.mkv..004 a.mkv..006多个点就不工作了,改一下吧。ls
a.12mkv000103 a.mkv000 a.mkv000000 a.mkv00000000004 a.mkv00002 a.mkv002 a.mkv004
rename -v 's/(?<![.\d])(\d++)$/sprintf ".%0".length($1)."d",$1+1/e' *
ls
a.12mkv.000104 a.mkv.00000000005 a.mkv.000001 a.mkv.00003 a.mkv.001 a.mkv.003 a.mkv.005
rename -v 's/(?<![.\d])(\d++)$/sprintf ".%0".length($1)."d",$1+1/e' *
ls
a.12mkv.000104 a.mkv.00000000005 a.mkv.000001 a.mkv.00003 a.mkv.001 a.mkv.003 a.mkv.005
就是有保护,多余的运行,会自动不操作