分页: 1 / 1
这个功能用shell怎么实现?
发表于 : 2009-05-25 2:28
由 coolwin
将一个目录下所有的文件名的数字都增加26,比如原来的文件名是a001.jpg。脚本执行后文件名为a027.jpg。
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 10:38
由 blue sea
ls *.jpg|while read file;do ((++n));mv "$file" a$n+26.jpg;done
你测试一下,不一定对.
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 10:41
由 bones7456
use on your own risk!
代码: 全选
ls *.jpg| awk '{match($1,/[0-9]+/);system("mv "$1" "sprintf("%s%03d%s",substr($1,0,RSTART-1),substr($1,RSTART,RLENGTH)+26,substr($1,RSTART+RLENGTH)))}'
要求原文件名不含空白字符.如果原来就有 a001.jpg 和 a027.jpg ,后者会被覆盖.自己小心~
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 15:22
由 coolwin
楼上的可以,谢谢两位
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 15:45
由 xiooli
代码: 全选
for i in *; do nm0="`echo $i|grep -o [0-9]*`";nm1="`bc <<<$nm0+26`";nm1="`printf '%.3d' $nm1`";mv $i ${i//[0-9]*/$nm1.jpg};done
bc应该有格式化输出的方法,我不知道,所以有点丑陋,将就能用而已。
ps:我的比骨头的短了24个字符呢,哈哈

Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 15:50
由 eexpress
我肯定可以再减少一半。
呵呵
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 15:57
由 xiooli
代码: 全选
for i in *;do a="`grep -o [0-9]*<<<$i`";b="`bc<<<$a+26`";b="`printf '%.3d' $b`";echo ${i//[0-9]*/$b.jpg};done
短了42个字符。

Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 15:59
由 eexpress
lz的思维,很呆板的。你也跟。换个思维吧。再短一半。
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 16:12
由 xiooli
难道直接用rename?我perl的正则不熟哦。
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 16:32
由 qq274980
xiooli 写了:ps:我的比骨头的短了24个字符呢,哈哈

代码: 全选
ls|awk '{system(sprintf("mv %s a%03s.jpg\n",$1,substr($0,2,3)+26))}'
骨头最短

Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 17:12
由 lerosua
脚本党出动...
Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 17:27
由 blue sea
题外,谁开发过linux下的四国军棋?
我一直wine没有成功

Re: 这个功能用shell怎么实现?
发表于 : 2009-05-25 17:29
由 qq274980
blue sea 写了:题外,谁开发过linux下的四国军棋?
我一直wine没有成功

先有四国麻将,才有空去写四国军棋,毕竟要看用户量办事
