网站搜索

Rename – 用于在 Linux 中重命名多个文件的命令行工具


Linux中,我们经常使用“mv”命令来重命名单个文件。然而,快速重命名多个或一组文件使得在终端中执行非常困难的任务。

Linux 附带了一个非常强大的内置工具,称为renamerename命令用于重命名多个或一组文件、将文件重命名为小写、将文件重命名为大写以及使用perl表达式覆盖文件。

rename”命令是Perl脚本的一部分,在许多Linux发行版上它位于“/usr/bin/”下。您可以运行“which”命令来查找重命名命令的位置。

which rename
/usr/bin/rename
重命名命令的基本语法
rename 's/old-name/new-name/' files

rename 命令带有一些可选参数以及指导 rename 命令执行实际工作的强制 perl 表达式

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
  1. -v:打印成功重命名的文件名。
  2. -n:显示哪些文件将被重命名。
  3. -f:强制覆盖现有文件。
  4. perlexpr:Perl 表达式。

为了更好地理解此实用程序,我们在本文中讨论了此命令的一些实际示例。

1. 基本重命名命令示例

假设您有一堆带有“.html”扩展名的文件,并且您想将所有“.html”文件重命名为“.php”一口气。例如,首先执行“ls -l”来检查扩展名为“.html”的文件列表。

ravisaive@tecmint:~$ 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表达式结合使用,如下所示。

ravisaive@tecmint:~$ rename 's/\.html$/\.php/' *.html

注意:在上面的命令中,我们使用了两个参数。

  1. 第一个参数是一个 perl 表达式,它将 .html 替换为 .php
  2. 第二个参数告诉重命名命令用 *.php 替换所有文件。

让我们验证是否所有文件都重命名为“.php”扩展名,在提示符下执行ls -l

ravisaive@tecmint:~$ 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”参数的重命名命令来检查更改。 “-n”参数将准确地告诉您将发生哪些更改,但这些更改并不是真正完成的。这是下面命令的示例。

ravisaive@tecmint:~$ 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. 打印重命名输出

我们看到重命名命令没有显示任何更改信息。因此,如果您想获取重命名命令的详细信息(就像我们使用“-n”选项所做的那样),这里我们使用“-v”选项来打印完整的通过重命名命令成功完成的所有更改的详细信息。

ravisaive@tecmint:~$ 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@tecmint:~$ 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@tecmint:~$ rename 'y/a-z/A-Z/' *.html

执行上述命令后,您可以通过执行“ls -l”来检查更改。

ravisaive@tecmint:~$ 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@tecmint:~$ rename 'y/A-Z/a-z/' *.HTML
ravisaive@tecmint:~$ 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@tecmint:~$ rename -f 's/a/b/' *.html

如果您想了解有关重命名命令的更多信息,请在终端中输入“man rename”。

如果您要从命令行处理多个或批量重命名文件,则重命名命令非常有用。请尝试一下并让我知道重命名文件的有用程度。