linux下rename命令的用法——适合大批量修改文件名
在看鸟哥私房菜的时候,遇到了mv这个可以修改文件名的命令。后面还有一个命令,叫rename。鸟哥让自己man帮助查询。结果自己一看,发现这个命令居然可以批量的修改文件名。
首先,看下man帮助里面的说明:
For example, given the files
foo1, ..., foo9, foo10, ..., foo278, thecommands
rename foo foo0 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278.
And
rename .htm .html *.htm
will fix the extension of your html files.
man帮助里给我们举了两个例子,什么意思呢,就是利用renamefoo foo0 foo? 类似这种命令,可以批量修改foo1,foo2,foo3这种有规律的文件名。rename的一共有三个参数,第一个参数是要修改的部分,第二个参数是修改成什么的部分,第三个是修改哪些文件。
还是要做实验,说的比较绕。
我们先在目录下建六个文件好了,分别是foo1,foo2, foo11,foo22,foo111,foo222
[root@centos-01test]# ls
foo1 foo11 foo111 foo2 foo22 foo222
现在我什么目的呢,就是要把foo后面不够三位的,前面用0代替,比如foo1修改成为foo001,foo22修改成为foo022,foo111和foo222不变。
那我们该怎么做呢,首先,我用这个命令:rename foo foo0 foo?
?是通配符,代表一个字符,也就是我会把名字为foo?这些文件的foo部分修改成为foo0。大家想想会有什么变化。
[root@centos-01test]# rename foo foo0 foo?
[root@centos-01test]# ls
foo01 foo02 foo11 foo111 foo22 foo222
看到了吗,foo?就代表四个字符,并且含有foo的文件。我们用命令把foo修改成为了foo0,所以才会有这样的效果。接下来我们再使用这个命令:rename foo foo0 foo??
[root@centos-01test]# rename foo foo0 foo??
[root@centos-01test]# ls
foo001 foo002 foo011 foo022 foo111 foo222
看到了吧,foo??这种五个字符的都会被修改。看到这里大家就会发现,rename这个命令,一是掌握结构,而是学会用通配符。
下面,我们换几个通配符试验。*代表任意字符
[root@centos-01test]# ls
foo001 foo002 foo011 foo022 foo111 foo222
[root@centos-01test]# rename foo ofo *
[root@centos-01test]# ls
ofo001 ofo002 ofo011 ofo022 ofo111 ofo222
[root@centos-01test]# rename ofo ccc ofo*1
[root@centos-01test]# ls
ccc001 ccc011 ccc111 ofo002 ofo022 ofo222
[root@centos-01test]# rename 1 c ccc*
[root@centos-01test]# ls
ccc00c ccc0c1 cccc11 ofo002 ofo022 ofo222//大家注意到,是从第一个出现1的时候更换的
比如我们还可以修改结尾文件名相似的。
[root@centos-01bobo]# ls
1.htm 2.htm 3.htm 4.htm 5.mmm
[root@centos-01bobo]# rename .htm .html *.htm
[root@centos-01bobo]# ls
1.html 2.html 3.html 4.html 5.mmm
[root@centos-01bobo]# rename .html @html *.html
[root@centos-01bobo]# ls
1@html 2@html 3@html 4@html 5.mmm
怎么样,是不是这个命令挺强大的。不过,大批量的创建和修改文件还是用脚本比较快速和灵活。