求助关于批量改文件的扩展名

sh/bash/dash/ksh/zsh等Shell脚本
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

Re: 求助关于批量改文件的扩展名

#31

帖子 ChenFengyuan » 2011-07-12 16:58

fnan 写了:
ChenFengyuan 写了:to fnan,你的bash也太长了。。。。。原来是要有+1的效果。。。。
交给perl好了。写得又短又漂亮。
:em11
确是还能突破,谢谢提醒。不过能短多少呢?无需太执着吧。
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
多个点就不工作了,改一下吧。
那是故意的....防止两次运行rename 那个,就是说多操作一次......
就是有保护,多余的运行,会自动不操作
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助关于批量改文件的扩展名

#32

帖子 fnan » 2011-09-07 3:53

eval "`ls|sed -r 's/(.*[^0-9.])(.*)/((a=1\2+1));mv & \1.${a:1}/'`"
rename -v 's/(?<![.\d])(\d++)$/sprintf ".%0".length($1)."d",$1+1/e' *
#有些无聊,翻旧问题搞精简。
rename -v 's/(?<![.\d])(\d+)$/".".substr("1".$1+1,1)/e' *
#perl也搞搞。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 求助关于批量改文件的扩展名

#33

帖子 我就是我2 » 2011-09-07 7:20

代码: 全选

for i in a.mkv*;do mv -v $i ${i/mkv/mkv.};done
會有什麽問題嗎?或者

代码: 全选

for i in a.mkv*;do mv -v $i ${i//mkv/mkv.};done
文件名會含有兩個mkv?
或者使用變量來替換mkv來實現靈活性?
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助关于批量改文件的扩展名

#34

帖子 fnan » 2011-09-07 7:49

我就是我2 写了:

代码: 全选

for i in a.mkv*;do mv -v $i ${i/mkv/mkv.};done
會有什麽問題嗎?或者

代码: 全选

for i in a.mkv*;do mv -v $i ${i//mkv/mkv.};done
文件名會含有兩個mkv?
或者使用變量來替換mkv來實現靈活性?
#bash变量操作不能提取字符(ttmmdd),要用sed。
eval "`ls|sed -r 's/(.*[^0-9])(.*)/mv & \1.\2/'`"
for i in *;do a=${i%%*([0-9])};mv $i $a.${i#$a};done
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复