我们经常使用
“MV”命令来重命名
Linux的一个文件。然而,快速重命名多个文件或一组文件使得终端中的任务非常困难。
Linux附带称为
重命名一个非常强大的内置工具。
rename命令用来重命名多个或一组文件,重命名文件为小写,重命名文件为大写,并用perl表达式覆盖文件。
“
rename”命令
的Perl脚本的一部分,它驻留在“
/usr/bin/”中很多Linux发行版。 您可以运行,找出“
which”命令rename命令的位置。
$ which rename
/usr/bin/rename
rename命令的基本语法
rename 's/old-name/new-name/' files
rename命令带有与引导rename命令做实际工作的强制性
Perl表达式沿着几个可选参数。
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
- -v:文件的打印名称更名成功。
- -n:显示哪些文件会被重新命名。
- -f:强制覆盖现有文件。
- perlexpr:Perl的表达。
为了更好地理解这个实用程序,我们在文章中讨论了这个命令的几个实例。
1.基本rename命令示例
假设你有一堆“
的.html”扩展名的文件,并且你想一气呵成重命名所有的
“.html”添加文件“
的.php”。 例如,首先做一个
“ls -l命令 ”,检查文件与
名“.html”扩展名列表。
# ravisaive@youcl:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
现在,你想改变所有这些文件的扩展名由
“.html”添加到“
的.php”。 您可以使用下面的“rename”命令与
Perl表达式如下图所示。
ravisaive@youcl:~$ rename 's/\.html$/\.php/' *.html
注 :在上面的命令,我们使用两个参数。
- 第一个参数是一个Perl的表达与.PHP 的.html代替。
- 第二个参数告诉rename命令来代替带*的.php的所有文件。
让我们来验证所有文件是否被重命名为“
的.php”扩展名,上的提示做
ls -l命令 。
ravisaive@youcl:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.php
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.php
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.php
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.php
现在你可以在上面看到,所有的
HTML文件重命名为
PHP。
2.运行rename命令之前检查更改
虽然这样做严重或重大重命名的任务,你可以随时通过运行 rename
“-n”参数命令来检查变化。 在
“-n”参数会告诉你到底什么样的变化会发生,但更改不会真正完成。这里,是以下命令的示例。
ravisaive@youcl:~$ rename -n 's/\.php$/\.html/' *.php
cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html
注 :以上命令的输出仅显示变化,但在现实的变化都没有做,除非你没有运行
“-n”开关命令。
3.打印rename输出
我们看到rename命令没有显示任何更改的信息。所以,如果你想获得rename命令的详细信息(如我们没有使用
“-n”选项),这里我们使用
“-v”选项来打印一份rename命令成功完成的所有更改的完整细节。
ravisaive@youcl:~$ rename -v 's/\.php$/\.html/' *.php
cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html
4.将所有小写转换为大写和Vise-Versa
要批量重命名的所有文件与
小写名称为
大写。比如,我想从
下到
上的情况下隐蔽所有这些下列文件。
大写
ravisaive@youcl:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
只是,使用以下命令与perl表达式。
ravisaive@youcl:~$ rename 'y/a-z/A-Z/' *.html
一旦你执行上述命令,你可以通过执行
“ls -l命令 ”检查的变化。
ravisaive@youcl:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 ENTERTAINMENT.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 NEWS.HTML
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 PHOTOS.HTML
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 SPORTS.HTML
你可以看到,上面的命令实际上改名所有的小写的文件名(带有扩展
名为.html)为大写。
从上到下
同样的,你也可以将所有
大写字符使用以下命令为
小写 。
ravisaive@youcl:~$ rename 'y/A-Z/a-z/' *.HTML
ravisaive@youcl:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
5.覆盖现有文件
如果您想强行覆盖现有文件,请使用
“-f”选项,如下图所示。
ravisaive@youcl:~$ rename -f 's/a/b/' *.html
如果您想了解更多关于rename命令,请在终端 “rename”。
rename命令是非常有用的,如果你正在处理命令行文件的多个或批量重命名。做一个尝试,让我知道,多远有用的文件重命名。