求助,rename

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

求助,rename

#1

帖子 iblicf » 2011-10-27 16:22

求助: 目录下的文件(都是 *.bak 文件),想要全部按顺序改名为 1.bak 2.bak 3.bak ...... 怎么写呢?

================================
rename -n "s/^.*\.bak$/$((i++))\.bak/" /root/test/*

我这个自增不管用 ~ :em03
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助,rename

#2

帖子 eexpress » 2011-10-27 16:27

gprename
● 鸣学
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

Re: 求助,rename

#3

帖子 iblicf » 2011-10-27 16:38

eexpress 写了:gprename
e 兄给个例子啊
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 求助,rename

#4

帖子 Methuselar » 2011-10-27 16:39

代码: 全选

ls -l *.bak | 你的sort | awk '{system("mv "$9" "NR".bak")}'
Mea Culpa!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助,rename

#5

帖子 lilydjwg » 2011-10-27 16:49

来个另类的:
vim + renamer.vim + vis.vim
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

Re: 求助,rename

#6

帖子 iblicf » 2011-10-27 16:50

Methuselar 写了:

代码: 全选

ls -l *.bak | 你的sort | awk '{system("mv "$9" "NR".bak")}'
rename 不能实现么? 我是要写到 cron 里头的,越简单越好

=======
:em01,谢拉
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助,rename

#7

帖子 lilydjwg » 2011-10-27 17:04

代码: 全选

perl -e 'my $i=0; for(@ARGV){ $i++; rename($_,"$i.bak"); }' *.bak
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,rename

#8

帖子 fnan » 2011-10-27 22:31

kose3@kose3-laptop:~/b$ ls
a.bak b.bak c.bak d.bak e.bak
kose3@kose3-laptop:~/b$ ls|grep -n ''|while read f;do mv -v ${f#*:} ${f/:*./.};done
`a.bak' -> `1.bak'
`b.bak' -> `2.bak'
`c.bak' -> `3.bak'
`d.bak' -> `4.bak'
`e.bak' -> `5.bak'
kose3@kose3-laptop:~/b$ ls
1.bak 2.bak 3.bak 4.bak 5.bak
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助,rename

#9

帖子 lilydjwg » 2011-10-27 22:43

fnan 写了:kose3@kose3-laptop:~/b$ ls
a.bak b.bak c.bak d.bak e.bak
kose3@kose3-laptop:~/b$ ls|grep -n ''|while read f;do mv -v ${f#*:} ${f/:*./.};done
`a.bak' -> `1.bak'
`b.bak' -> `2.bak'
`c.bak' -> `3.bak'
`d.bak' -> `4.bak'
`e.bak' -> `5.bak'
kose3@kose3-laptop:~/b$ ls
1.bak 2.bak 3.bak 4.bak 5.bak
看不懂求解释。。。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,rename

#10

帖子 fnan » 2011-10-27 22:59

lilydjwg 写了:
fnan 写了:kose3@kose3-laptop:~/b$ ls
a.bak b.bak c.bak d.bak e.bak
kose3@kose3-laptop:~/b$ ls|grep -n ''|while read f;do mv -v ${f#*:} ${f/:*./.};done
`a.bak' -> `1.bak'
`b.bak' -> `2.bak'
`c.bak' -> `3.bak'
`d.bak' -> `4.bak'
`e.bak' -> `5.bak'
kose3@kose3-laptop:~/b$ ls
1.bak 2.bak 3.bak 4.bak 5.bak
看不懂求解释。。。
#kose3@kose3-laptop:~/b$ ls|grep -n ''|while read f;do echo "得到 $f 将要转为 命令 mv -v ${f#*:} ${f/:*./.} 跟着执行";done
得到 1:a.bak 将要转为 命令 mv -v a.bak 1.bak 跟着执行
得到 2:b.bak 将要转为 命令 mv -v b.bak 2.bak 跟着执行
得到 3:c.bak 将要转为 命令 mv -v c.bak 3.bak 跟着执行
得到 4:d.bak 将要转为 命令 mv -v d.bak 4.bak 跟着执行
得到 5:e.bak 将要转为 命令 mv -v e.bak 5.bak 跟着执行
kose3@kose3-laptop:~/b$
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助,rename

#11

帖子 lilydjwg » 2011-10-27 23:27

fnan 写了: #kose3@kose3-laptop:~/b$ ls|grep -n ''|while read f;do echo "得到 $f 将要转为 命令 mv -v ${f#*:} ${f/:*./.} 跟着执行";done
得到 1:a.bak 将要转为 命令 mv -v a.bak 1.bak 跟着执行
得到 2:b.bak 将要转为 命令 mv -v b.bak 2.bak 跟着执行
得到 3:c.bak 将要转为 命令 mv -v c.bak 3.bak 跟着执行
得到 4:d.bak 将要转为 命令 mv -v d.bak 4.bak 跟着执行
得到 5:e.bak 将要转为 命令 mv -v e.bak 5.bak 跟着执行
kose3@kose3-laptop:~/b$
啊,原来我把 grep -n 看漏了,囧。。。。也许用 cat -n 或者 nl 会更快?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助,rename

#12

帖子 eexpress » 2011-10-28 8:56

我说的,又没人看见。 :em20
● 鸣学
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 求助,rename

#13

帖子 Methuselar » 2011-10-28 12:47

eexpress 写了:我说的,又没人看见。 :em20
人家叫你给例子嘛,是你先没看见的...
Mea Culpa!
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 求助,rename

#14

帖子 naturalaw » 2011-11-01 22:06

Methuselar 写了:
eexpress 写了:我说的,又没人看见。 :em20
人家叫你给例子嘛,是你先没看见的...
:em04 :em04 ee别怪我哈。
  • The eternal law
回复