Rename - 用于在 Linux 中重命名多个文件的命令行工具
我们经常使用“ mv ”命令在Linux中重命名单个文件。然而,在终端中快速重命名多个或一组文件会变得非常困难。
Linux附带一个非常强大的内置工具,名为rename。rename命令用于重命名多个或一组文件、将文件重命名为小写、将文件重命名为大写以及使用 perl 表达式覆盖文件。
“ rename ” 命令是Perl脚本的一部分,在许多 Linux 发行版中它位于“ /usr/bin/ ”下。您可以运行“ which ”命令来找出 rename 命令的位置。
$ which rename /usr/bin/rename
重命名命令的基本语法
rename 's/old-name/new-name/' files
rename 命令带有一些可选参数以及指导 rename 命令执行实际工作的强制性perl 表达式。
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
- -v:打印成功重命名的文件的名称。
- -n:显示哪些文件已被重命名。
- -f:强制覆盖现有文件。
- perlexpr:Perl 表达式。
为了更好地理解此实用程序,我们在本文中讨论了该命令的一些实际示例。
1. 基本重命名命令示例
假设您有一堆带有“ .html ”扩展名的文件,并且您想一次性将所有“ .html ”文件重命名为“ .php ”。例如,首先执行“ ls -l ”以检查带有“ .html ”扩展名的文件列表。
# ravisaive@example:~$ 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 ”。您可以使用以下带有perl 表达式的“ rename ”命令,如下所示。
ravisaive@example:~$ rename 's/\.html$/\.php/' *.html
注意:在上面的命令中我们使用了两个参数。
- 第一个参数是一个用.php替换.html 的perl 表达式。
- 第二个参数告诉重命名命令用*.php替换所有文件。
让我们验证所有文件是否都重命名为“ .php ”扩展名,在提示符下执行ls -l 。
ravisaive@example:~$ 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. 运行重命名命令前检查更改
在执行关键或重大重命名任务时,您可以随时通过运行带有“ -n ”参数的 rename 命令来检查更改。“ -n ”参数将确切告诉您将发生哪些更改,但更改并非真正完成。下面是以下命令的示例。
ravisaive@example:~$ 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 命令的详细信息(就像我们使用“ -n ”选项所做的那样),这里我们使用“ -v ”选项来打印 rename 命令成功完成的所有更改的完整详细信息。
ravisaive@example:~$ 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. 将所有小写字母转换为大写字母,反之亦然
批量重命名所有小写文件为大写。例如,我想将以下所有文件从小写转换为大写。
从小写转为大写
ravisaive@example:~$ 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@example:~$ rename 'y/a-z/A-Z/' *.html
执行上述命令后,您可以通过“ ls -l ”检查更改。
ravisaive@example:~$ 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@example:~$ rename 'y/A-Z/a-z/' *.HTML
ravisaive@example:~$ 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. 文件名首字母大写
要仅将每个文件名的首字母大写,请使用以下命令。
# rename 's/\b(\w)/\U$1/g' *.ext
6.覆盖现有文件
如果您想强制覆盖现有文件,请使用“ -f ”选项,如下所示。
ravisaive@example:~$ rename -f 's/a/b/' *.html
如果您想了解有关重命名命令的更多信息,请在终端中输入“ man rename ”。
如果您要从命令行处理多个或批量重命名文件,则rename命令非常有用。请尝试一下,然后告诉我它在文件重命名方面有多大用处。