分页: 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个字符呢,哈哈 :em05

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个字符。 :em11

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个字符呢,哈哈 :em05

代码: 全选

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

Re: 这个功能用shell怎么实现?

发表于 : 2009-05-25 17:12
lerosua
脚本党出动...

Re: 这个功能用shell怎么实现?

发表于 : 2009-05-25 17:27
blue sea
题外,谁开发过linux下的四国军棋?

我一直wine没有成功 :em06

Re: 这个功能用shell怎么实现?

发表于 : 2009-05-25 17:29
qq274980
blue sea 写了:题外,谁开发过linux下的四国军棋?

我一直wine没有成功 :em06

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