今天在学习rm命令的时候,提到rm也有重命名文件和目录的功能,同时,还有一个专门用于重命名的命令,即rename。
可是,貌似这个命令不是很常用。我man了一下rename,这里是手册的内容:
RENAME(1) Linux Programmer’s Manual RENAME(1)
NAME
rename - Rename files
SYNOPSIS
rename from to file...
rename -V
DESCRIPTION
rename will rename the specified files by replacing the first occur-
rence of from in their name by to.
-V, --version
Display version information and exit.
For example, given the files
foo1, ..., foo9, foo10, ..., foo278, the commands
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.
可能是自己英语理解能力很不够吧,上面的描述部分愣是没看懂,而且下边的举例也没看明白。后来,在网上搜索了一下,琢磨半天,才终于是彻底明白了rename的基本用法了。
rename语法:rename
from
to files
注意rename需要三个参数,而不是两个
解释:就是将文件files中第一次出现的from全部替换成to。即from是files文件名的一部分,将该部分全部替换成to。对照着上面英文部分的描述,还确实是那么回事,所以只能怪自己英语水平不够了!
man里的例子说明(rename命令结合通配符?可以批量重命名文件):
假如有文件foo1,...,foo9,...,foo278
输入命令:#rename foo foo0 foo?
因为?只能通配单个字符,所以只有foo1,...foo9被重命名为foo01,...foo09
输入命令:#rename foo foo0 foo??
两个??则可以通配两个字符,所以文件名会发生如下变化:foo001,...,foo009,foo010,...,foo099
当然还是可以继续增加通配符?的个数,规律和上面是一样的。
还有两种通配符,即*和charset,举例说明如下:
输入:#rename foo foo0 foo*
则所以以foo开头的文件都被重命名了:foo01,...,foo09,...,foo010,...foo0278
输入:#rename foo0 foo foo0[2]*
则所有以foo02开头的文件,其中的foo0被替换成了foo。
以上主要是批量重命名,那么对于单个文件的命名就很容易想到了,即如第一个参数和最后一个参数完全相同,就可以将文件名重命名第二个参数了。
如:#rename filename newname filename
这里要注意:linux的文件名都是带扩展名的,即后缀,所以,重命名时一定要写出文件的完整名,包括进后缀。如:
当前目录下有一个文件test.txt:
输入:#rename test.txt test2.txt test.txt
这是就将test.txt重命名为test2.txt
如果输入:#rename test.txt test.doc test.txt
就将原文件修改成了test2.doc,所以这时一定要多加注意!
附:mv命令的移动功能和重命名功能:
使用了几次mv命令后,发现对mv的移动和重命名的功能有些混淆不清了,尝试几次后,总结出:
#mv source dest
1.如果source是文件:
(a)dest也是文件,那肯定是重命名,将source重命名为dest
(3)dest是目录,则是移动,将source移动到dest目录中
2.如果source是目录,那么dest必须是目录:
(a)如果dest目录存在,则是移动,将source整个目录移动到dest目录下
(b)如果dest目录不存在,则是重命名,即将source目录重命名为dest目录。
这些是我自己尝试并总结出来的,也许并不完善或有错误,请大家不吝纠错呵完善,谢谢!