linux中重命名多个文件的命令行工具

2022-06-02 15:22:47 浏览数 (1)

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

rename 命令是Perl脚本,它驻留在/usr/bin/在许多Linux发行版上。你可以运行which命令找出重命名命令的位置。

代码语言:javascript复制
$ which rename
/usr/bin/rename
重命名命令的基本语法
代码语言:javascript复制
rename 's/old-name/new-name/' files

重命名命令带有几个可选参数以及强制性perl expression指导重命名命令执行实际工作。

代码语言:javascript复制
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
  • -v: 打印成功重命名的文件名。
  • -n:显示哪些文件将被重命名。
  • -f: 强制覆盖现有文件。
  • perlexpr: Perl 表达式。

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

1. 一个基本的重命名命令示例

假设你有一堆带有 .html 扩展名,并且你想重命名所有.html文件到 .php 一口气。例如,首先做一个 ls -l 检查文件列表与 .html 延期。

代码语言:javascript复制
# 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如下所示。

代码语言:javascript复制
rumenz@local:~$ rename 's/.html$/.php/' *.html

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

  • 第一个参数是perl expression那个替代品.html.php.
  • 第二个参数告诉重命名命令将所有文件替换为*.php.

让我们验证是否所有文件都重命名为.php延伸,做ls -l在提示上。

代码语言:javascript复制
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.

2. 在运行重命名命令之前检查更改

在执行关键或主要的重命名任务时,可以通过运行带有-n参数的rename命令来检查更改。-n参数将确切地告诉您将发生哪些更改,但这些更改并不是实际执行的。

代码语言:javascript复制
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 转变。

3. 打印重命名输出

我们看到 rename 命令没有显示它所做的任何更改的信息。所以,如果你想获得重命名命令的详细信息(就像我们使用 -n 选项),这里我们使用 -v 选项打印成功通过重命名命令完成的所有更改的完整详细信息。

代码语言:javascript复制
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

4. 将所有小写转换为大写和 Vise-Versa

批量重命名所有文件lower case名称upper case.例如,我想从以下文件中隐藏所有这些文件lowerupper案件。

小写到大写
代码语言:javascript复制
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 表达式一起使用。

代码语言:javascript复制
rumenz@local:~$ rename 'y/a-z/A-Z/' *.html

执行上述命令后,你可以通过执行 ls -l

代码语言:javascript复制
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使用以下命令。

代码语言:javascript复制
rumenz@local:~$ rename 'y/A-Z/a-z/' *.HTML
代码语言:javascript复制
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

5. 文件名首字母大写

要仅将每个文件名的首字母大写,请使用以下命令。

代码语言:javascript复制
# rename 's/b(w)/U$1/g' *.ext

文件名首字母大写

6. 覆盖现有文件

如果你想强行覆盖现有文件,请使用 -f 选项如下图。

代码语言:javascript复制
rumenz@local:~$ rename -f 's/a/b/' *.html

相关命令

linux之rename命令

Linux之mv命令

0 人点赞