Linux带有一个非常强大的内置工具,称为rename.这rename命令用于重命名多个或一组文件,将文件重命名为小写,将文件重命名为大写以及使用 perl 表达式覆盖文件。这
rename命令是Perl脚本,它驻留在/usr/bin/在许多Linux发行版上。你可以运行which命令找出重命名命令的位置。
$ which rename
/usr/bin/rename
rename 's/old-name/new-name/' files
重命名命令带有几个可选参数以及强制性
perl expression指导重命名命令执行实际工作。
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v: 打印成功重命名的文件名。-n:显示哪些文件将被重命名。-f: 强制覆盖现有文件。perlexpr: Perl 表达式。为了更好地理解此实用程序,我们在文章中讨论了此命令的几个实际示例。
假设你有一堆带有
.html扩展名,并且你想重命名所有.html文件到.php一口气。例如,首先做一个ls -l检查文件列表与.html延期。
# rumenz@local:~$ ls -l
total 22532
-rw-rw-r-- 1 rumenz rumenz 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 rumenz rumenz 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 rumenz rumenz 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 rumenz rumenz 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 rumenz rumenz 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 rumenz rumenz 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 rumenz rumenz 978137 Oct 10 12:11 sports.html
现在,你想将所有这些文件的扩展名从
.html到.php。你可以使用以下rename命令与perl expression如下所示。
rumenz@local:~$ rename 's/\.html$/\.php/' *.html
Note:在上面的命令中,我们使用了两个参数。
perl expression那个替代品.html和.php.*.php.让我们验证是否所有文件都重命名为
.php延伸,做ls -l在提示上。
rumenz@local:~$ ls -l
total 22532
-rw-rw-r-- 1 rumenz rumenz 6888896 Oct 10 12:10 cricket.php
-rw-rw-r-- 1 rumenz rumenz 588895 Oct 10 12:10 entertainment.php
-rw-rw-r-- 1 rumenz rumenz 6188895 Oct 10 12:10 health.php
-rw-rw-r-- 1 rumenz rumenz 6538895 Oct 10 12:10 lifestyle.php
-rw-rw-r-- 1 rumenz rumenz 938895 Oct 10 12:10 news.php
-rw-rw-r-- 1 rumenz rumenz 938937 Oct 10 12:11 photos.php
-rw-rw-r-- 1 rumenz rumenz 978137 Oct 10 12:11 sports.php
现在你可以在上面看到所有的
html文件重命名为php.
在执行关键或主要的重命名任务时,可以通过运行带有
-n参数的rename命令来检查更改。-n参数将确切地告诉您将发生哪些更改,但这些更改并不是实际执行的。
rumenz@local:~$ 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
Note: 上面的命令输出只显示更改,但实际上更改没有完成,除非你运行命令时不带-n转变。
我们看到 rename 命令没有显示它所做的任何更改的信息。所以,如果你想获得重命名命令的详细信息(就像我们使用
-n选项),这里我们使用-v选项打印成功通过重命名命令完成的所有更改的完整详细信息。
rumenz@local:~$ 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
批量重命名所有文件
lower case名称upper case.例如,我想从以下文件中隐藏所有这些文件lower到upper案件。
rumenz@local:~$ ls -l
total 22532
-rw-rw-r-- 1 rumenz rumenz 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 rumenz rumenz 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 rumenz rumenz 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 rumenz rumenz 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 rumenz rumenz 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 rumenz rumenz 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 rumenz rumenz 978137 Oct 10 12:11 sports.html
只需将以下命令与 perl 表达式一起使用。
rumenz@local:~$ rename 'y/a-z/A-Z/' *.html
执行上述命令后,你可以通过执行
ls -l。
rumenz@local:~$ ls -l
total 22532
-rw-rw-r-- 1 rumenz rumenz 6888896 Oct 10 12:10 CRICKET.HTML
-rw-rw-r-- 1 rumenz rumenz 588895 Oct 10 12:10 ENTERTAINMENT.HTML
-rw-rw-r-- 1 rumenz rumenz 6188895 Oct 10 12:10 HEALTH.HTML
-rw-rw-r-- 1 rumenz rumenz 6538895 Oct 10 12:10 LIFESTYLE.HTML
-rw-rw-r-- 1 rumenz rumenz 938895 Oct 10 12:10 NEWS.HTML
-rw-rw-r-- 1 rumenz rumenz 938937 Oct 10 12:11 PHOTOS.HTML
-rw-rw-r-- 1 rumenz rumenz 978137 Oct 10 12:11 SPORTS.HTML
可以看到上面的命令实际上重命名了所有的小写文件名(用
.HTML扩展名)到大写。
同样,你也可以将所有
upper case字符到lower case使用以下命令。
rumenz@local:~$ rename 'y/A-Z/a-z/' *.HTML
rumenz@local:~$ ls -l
total 22532
-rw-rw-r-- 1 rumenz rumenz 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 rumenz rumenz 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 rumenz rumenz 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 rumenz rumenz 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 rumenz rumenz 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 rumenz rumenz 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 rumenz rumenz 978137 Oct 10 12:11 sports.html
要仅将每个文件名的首字母大写,请使用以下命令。
# rename 's/\b(\w)/\U$1/g' *.ext
文件名首字母大写
如果你想强行覆盖现有文件,请使用
-f选项如下图。
rumenz@local:~$ rename -f 's/a/b/' *.html
相关命令
linux之rename命令
Linux之mv命令