这个功能用shell怎么实现?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
coolwin
帖子: 271
注册时间: 2008-03-17 17:47

这个功能用shell怎么实现?

#1

帖子 coolwin » 2009-05-25 2:28

将一个目录下所有的文件名的数字都增加26,比如原来的文件名是a001.jpg。脚本执行后文件名为a027.jpg。
blue sea
帖子: 198
注册时间: 2007-11-10 8:57

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

#2

帖子 blue sea » 2009-05-25 10:38

ls *.jpg|while read file;do ((++n));mv "$file" a$n+26.jpg;done

你测试一下,不一定对.
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

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

#3

帖子 bones7456 » 2009-05-25 10:41

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 ,后者会被覆盖.自己小心~
关注我的blog: ε==3
头像
coolwin
帖子: 271
注册时间: 2008-03-17 17:47

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

#4

帖子 coolwin » 2009-05-25 15:22

楼上的可以,谢谢两位
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

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

#5

帖子 xiooli » 2009-05-25 15:45

代码: 全选

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
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#6

帖子 eexpress » 2009-05-25 15:50

我肯定可以再减少一半。
呵呵
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

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

#7

帖子 xiooli » 2009-05-25 15:57

代码: 全选

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
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#8

帖子 eexpress » 2009-05-25 15:59

lz的思维,很呆板的。你也跟。换个思维吧。再短一半。
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

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

#9

帖子 xiooli » 2009-05-25 16:12

难道直接用rename?我perl的正则不熟哦。
头像
qq274980
帖子: 69
注册时间: 2009-04-09 9:16

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

#10

帖子 qq274980 » 2009-05-25 16:32

xiooli 写了:ps:我的比骨头的短了24个字符呢,哈哈 :em05

代码: 全选

ls|awk '{system(sprintf("mv %s a%03s.jpg\n",$1,substr($0,2,3)+26))}'
骨头最短 :em04
头像
lerosua
论坛版主
帖子: 8455
注册时间: 2007-11-29 9:41
联系:

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

#11

帖子 lerosua » 2009-05-25 17:12

脚本党出动...
blue sea
帖子: 198
注册时间: 2007-11-10 8:57

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

#12

帖子 blue sea » 2009-05-25 17:27

题外,谁开发过linux下的四国军棋?

我一直wine没有成功 :em06
头像
qq274980
帖子: 69
注册时间: 2009-04-09 9:16

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

#13

帖子 qq274980 » 2009-05-25 17:29

blue sea 写了:题外,谁开发过linux下的四国军棋?

我一直wine没有成功 :em06

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