如何在linux中重命名文件和目录

2022-06-02 18:01:27 浏览数 (1)

重命名文件和目录是你经常需要在Linux系统上执行的最基本任务之一。

重命名单个文件很简单,但一次重命名多个文件可能是一个挑战,特别是对于刚接触Linux的用户而言。你可以使用GUI文件管理器或命令行终端重命名文件。

在本教程中,我们将向你展示如何使用mvrename命令重命名文件和目录。

使用mv命令重命名文件

mv命令(移动时间短)用于将文件从一个位置重命名或移动到另一个位置。mv命令的语法如下:

代码语言:javascript复制
mv [OPTIONS] source destination

source可以是一个或多个文件或目录,destination可以是单个文件或目录。

  • 如果指定多个文件source,则destination必须是目录。在这种情况下,source文件将移动到destination目录。
  • 如果将单个文件指定为source,并且destination目标是现有目录,则该文件将移动到指定目录。
  • 要重命名文件,你需要将单个文件指定为source,并将单个文件指定为destination目标。

例如,将file1.txt重命名为file2.txt

代码语言:javascript复制
mv filetxt filetxt

使用mv命令重命名多个文件

mv命令一次只能重命名一个文件,但它可以与其他命令一起使用,例如find在bash for或while循环中重命名多个文件。

在以下示例中显示如何使用Bash for循环将重命名当前目录中的所有 .html文件扩展名更改为.php

代码语言:javascript复制
for f in *.html; do 
    mv -- "$f" "${f%.html}.php"
done

让我们逐行分析代码:

  • 第一行创建一个for循环并遍历一个包含所有.html文件的列表。
  • 第二行将列表中的每个项目和文件移动到一个新的目标并用.php替换.html${file%.html}部分使用的是shell参数扩展.html从文件名中删除。
  • done表示循环段的结束。

我们也可以让mv结合find命令来实现与上面相同的功能。

代码语言:javascript复制
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \;

find命令将所有当前目录下以.html结尾的文件,一个接一个地传递给命令-exec。字符串{}是当前正在处理的文件的名称。

从上面的示例中可以看出,使用mv命令重命名多个文件并不是一件容易的事,因为它需要你很好地了解Bash脚本。

使用rename命令重命名文件

rename命令用于重命名多个文件。此命令比mv需要正则表达式的一些更高级基本知识。

rename命令有两个版本,语法不同。在本教程中,我们将使用rename命令的perl版本。如果你的系统上未安装此版本,则可以使用发行版的软件包管理器轻松安装该版本。

在Ubuntu和Debian上安装重命名

代码语言:javascript复制
sudo apt install rename

在CentOS和Fedora上安装重命名

代码语言:javascript复制
sudo yum install prename

在Arch Linux上安装重命名

代码语言:javascript复制
yay perl-rename ## or yaourt -S perl-rename

rename命令的语法如下:

代码语言:javascript复制
rename [OPTIONS] perlexpr files

rename命令将files 多个文件根据指定的perlexpr正则表达式重命名所有文件 。你可以在这里阅读更多有关Perl的正则表达式的知识。

例如,下面的命令将更改与扩展名的文件.html.php

代码语言:javascript复制
rename 's/.html/.php/' *.html

你可以使用-n参数打印要重命名的文件的名称,而不重命名文件,可以用来做简单的测试。

代码语言:javascript复制
rename -n 's/.html/.php/' *.html

输出看起来像这样:

代码语言:javascript复制
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参数以允许覆盖现有文件。

代码语言:javascript复制
rename -f 's/.html/.php/' *.html

以下是一些如何使用rename命令的常见示例:

用下划线替换文件名中的空格

rename 'y/ /_/' *

将文件名转换为小写

代码语言:javascript复制
rename 'y/A-Z/a-z/' *

将文件名转换为大写

代码语言:javascript复制
rename 'y/a-z/A-Z/' *

至此你应该很好地理解如何使用mvrename命令重命名文件。当然,还有其他命令可以在Linux中重命名文件,例如mmv。对于新Linux用户可以使用GUI批量重命名工具,例如Metamorphose。

0 人点赞