代码语言:javascript复制
Linux
带有一个非常强大的内置工具,称为rename
.这rename
命令用于重命名多个或一组文件,将文件重命名为小写,将文件重命名为大写以及使用 perl 表达式覆盖文件。这
rename
命令是Perl
脚本,它驻留在/usr/bin/
在许多Linux发行版上。你可以运行which
命令找出重命名命令的位置。
$ which rename
/usr/bin/rename
重命名命令的基本语法
代码语言:javascript复制rename 's/old-name/new-name/' files
代码语言:javascript复制重命名命令带有几个可选参数以及强制性
perl expression
指导重命名命令执行实际工作。
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v
: 打印成功重命名的文件名。-n
:显示哪些文件将被重命名。-f
: 强制覆盖现有文件。perlexpr
: Perl 表达式。
为了更好地理解此实用程序,我们在文章中讨论了此命令的几个实际示例。
1. 一个基本的重命名命令示例
代码语言:javascript复制假设你有一堆带有
.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
代码语言:javascript复制现在,你想将所有这些文件的扩展名从
.html
到.php
。你可以使用以下rename
命令与perl expression
如下所示。
rumenz@local:~$ rename 's/.html$/.php/' *.html
Note
:在上面的命令中,我们使用了两个参数。
- 第一个参数是
perl expression
那个替代品.html
和.php
. - 第二个参数告诉重命名命令将所有文件替换为
*.php
.
代码语言:javascript复制让我们验证是否所有文件都重命名为
.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
.
2. 在运行重命名命令之前检查更改
代码语言:javascript复制在执行关键或主要的重命名任务时,可以通过运行带有
-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
转变。
3. 打印重命名输出
代码语言:javascript复制我们看到 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
4. 将所有小写转换为大写和 Vise-Versa
批量重命名所有文件
lower case
名称upper case.
例如,我想从以下文件中隐藏所有这些文件lower
到upper
案件。
小写到大写
代码语言: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
代码语言:javascript复制只需将以下命令与 perl 表达式一起使用。
rumenz@local:~$ rename 'y/a-z/A-Z/' *.html
代码语言:javascript复制执行上述命令后,你可以通过执行
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
扩展名)到大写。
大写到小写
代码语言:javascript复制同样,你也可以将所有
upper case
字符到lower case
使用以下命令。
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. 覆盖现有文件
代码语言:javascript复制如果你想强行覆盖现有文件,请使用
-f
选项如下图。
rumenz@local:~$ rename -f 's/a/b/' *.html
相关命令
linux之rename命令
Linux之mv命令