重命名文件是您经常需要在 Linux 系统上执行的最基本任务之一。您可以使用 GUI 文件管理器或通过命令行终端重命名文件。
重命名单个文件很容易,但一次重命名多个文件可能是一个挑战,特别是对于 Linux 新手来说。
在本教程中,我们将向您展示如何使用mv
and rename
重命名文件和目录的命令。
重命名文件mv
命令#
The MV命令(缺少移动)用于重命名文件或将文件从一个位置移动到另一个位置。语法为mv
命令如下:
mv [OPTIONS] source destination
The source
可以是一个或多个文件或目录destination
可以是单个文件或目录。
- 如果您将多个文件指定为
source
, the destination
必须是一个目录。在这种情况下,source
文件被移动到目标目录。
- 如果您将单个文件指定为
source
,以及destination
target 是现有目录,则将文件移动到指定目录。
- 要重命名文件,您需要指定单个文件作为
source
和单个文件作为destination
target.
例如,重命名文件file1.txt
as file2.txt
你会运行:
mv file1.txt file2.txt
使用以下命令重命名多个文件mv
命令#
The mv
命令一次只能重命名一个文件,但可以与其他命令结合使用,例如find或在 bash 内for
or while循环重命名多个文件。
以下示例展示了如何使用 Bash for 循环重命名所有.html
通过更改当前目录中的文件.html
延伸至.php
.
for f in *.html; do
mv -- "$f" "${f%.html}.php"
done
我们逐行分析一下代码:
- 第一行创建一个
for
循环并迭代所有文件的列表.html
.
- 第二行适用于列表中的每一项,并将文件移动到新的文件中替换
.html
with .php
。那个部分${file%.html}
正在使用shell参数扩展删除.html
文件名的一部分。
-
done
表示循环段的结束。
这是一个使用的示例mv
结合find
达到与上面相同的效果:
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \;
The find
命令正在传递以以下结尾的所有文件.html
在当前目录下到mv
一项一项地使用-exec
选项。字符串{}
是当前正在处理的文件的名称。
正如您从上面的示例中看到的,使用以下命令重命名多个文件mv
命令不是一件容易的事,因为它需要对 Bash 脚本有很好的了解。
重命名文件rename
命令#
The rename
命令用于重命名多个文件。该命令比mv
因为它需要一些正则表达式的基础知识。
有两个版本rename
具有不同语法的命令。在本教程中,我们将使用 Perl 版本rename
命令。如果您的系统上没有安装此版本,您可以使用发行版的包管理器轻松安装它。
-
Install rename
在 Ubuntu 和 Debian 上
sudo apt install rename
-
Install rename
在 CentOS 和 Fedora 上
sudo yum install prename
-
Install rename
在 Arch Linux 上
yay perl-rename ## or yaourt -S perl-rename
语法为rename
命令如下:
rename [OPTIONS] perlexpr files
The rename
命令将重命名files
根据指定的perlexpr
正则表达式。您可以阅读有关 perl 正则表达式的更多信息here
.
以下示例将更改所有具有扩展名的文件.html
to .php
:
rename 's/.html/.php/' \*.html
您可以使用-n
选项可以打印要重命名的文件的名称,而不重命名它们。
rename -n 's/.html/.php/' \*.html
输出将如下所示:
rename(file-90.html, file-90.php)
rename(file-91.html, file-91.php)
rename(file-92.html, file-92.php)
rename(file-93.html, file-93.php)
rename(file-94.html, file-94.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
and rename
重命名文件的命令。
Linux 中还有其他重命名文件的命令,例如mmv。被命令行吓倒的 Linux 新用户可以使用 GUI 批量重命名工具,例如变态
.
如果您有任何问题或反馈,请随时发表评论。