重命名文件和目录是你经常需要在Linux系统上执行的最基本任务之一。
重命名单个文件很简单,但一次重命名多个文件可能是一个挑战,特别是对于刚接触Linux的用户而言。你可以使用GUI文件管理器或命令行终端重命名文件。
在本教程中,我们将向你展示如何使用
mv
和rename
命令重命名文件和目录。
mv
命令(移动时间短)用于将文件从一个位置重命名或移动到另一个位置。mv
命令的语法如下:
mv [OPTIONS] source destination
source
可以是一个或多个文件或目录,destination
可以是单个文件或目录。
source
,则destination
必须是目录。在这种情况下,source
文件将移动到destination
目录。source
,并且destination
目标是现有目录,则该文件将移动到指定目录。source
,并将单个文件指定为destination
目标。例如,将
file1.txt
重命名为file2.txt
:
mv filetxt filetxt
mv
命令一次只能重命名一个文件,但它可以与其他命令一起使用,例如find
在bash for或while循环中重命名多个文件。在以下示例中显示如何使用Bash for循环将重命名当前目录中的所有
.html
文件扩展名更改为.php
。
for f in *.html; do
mv -- "$f" "${f%.html}.php"
done
让我们逐行分析代码:
.html
文件的列表。.php
替换.html
。${file%.html}
部分使用的是shell参数扩展.html
从文件名中删除。我们也可以让
mv
结合find
命令来实现与上面相同的功能。
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \\;
find
命令将所有当前目录下以.html
结尾的文件,一个接一个地传递给命令-exec
。字符串{}
是当前正在处理的文件的名称。从上面的示例中可以看出,使用
mv
命令重命名多个文件并不是一件容易的事,因为它需要你很好地了解Bash脚本。
rename
命令用于重命名多个文件。此命令比mv
需要正则表达式的一些更高级基本知识。
rename
命令有两个版本,语法不同。在本教程中,我们将使用rename
命令的perl版本。如果你的系统上未安装此版本,则可以使用发行版的软件包管理器轻松安装该版本。在Ubuntu和Debian上安装重命名
sudo apt install rename
在CentOS和Fedora上安装重命名
sudo yum install prename
在Arch Linux上安装重命名
yay perl-rename ## or yaourt -S perl-rename
rename
命令的语法如下:
rename [OPTIONS] perlexpr files
rename
命令将files
多个文件根据指定的perlexpr
正则表达式重命名所有文件 。你可以在这里阅读更多有关Perl的正则表达式的知识。例如,下面的命令将更改与扩展名的文件
.html
到.php
:
rename 's/.html/.php/' *.html
你可以使用
-n
参数打印要重命名的文件的名称,而不重命名文件,可以用来做简单的测试。
rename -n 's/.html/.php/' *.html
输出看起来像这样:
rename(file-html, file-php)
rename(file-html, file-php)
rename(file-html, file-php)
rename(file-html, file-php)
rename(file-html, file-php)
默认情况下,
rename
命令不会覆盖现有文件。传递-f
参数以允许覆盖现有文件。
rename -f 's/.html/.php/' *.html
以下是一些如何使用rename命令的常见示例:
用下划线替换文件名中的空格
rename 'y/ /_/' *
将文件名转换为小写
rename 'y/A-Z/a-z/' *
将文件名转换为大写
rename 'y/a-z/A-Z/' *
至此你应该很好地理解如何使用
mv
和rename
命令重命名文件。当然,还有其他命令可以在Linux中重命名文件,例如mmv
。对于新Linux用户可以使用GUI批量重命名工具,例如Metamorphose。