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

时间:2020-03-05 15:27:28  来源:igfitidea点击:

重命名文件是我们在Linux系统上经常需要执行的最基本的任务之一。
我们可以使用GUI文件管理器或者通过命令行终端重命名文件。

重命名单个文件很容易,但是一次重命名多个文件可能是一个挑战,特别是对于Linux新手而言。

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

使用“ mv”命令重命名文件

“ mv”命令(缺少移动)用于将文件重命名或者从一个位置移动到另一位置。

“ mv”命令的语法如下:

mv [OPTIONS] source destination

“源”可以是一个或者多个文件,或者目录和“目标”可以是单个文件或者目录。

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

例如,要将文件“ file1.txt”重命名为“ file2.txt”,可以运行:

mv file1.txt file2.txt

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

“ mv”命令一次只能重命名一个文件,但可以与“ find”或者bash内部“ for”或者“ while”循环等其他命令结合使用来重命名多个文件。

下面的示例演示如何使用Bash for循环通过将'.html'扩展名更改为'.php'来重命名当前目录中的所有'.html'文件。

for f in *.html; do
    mv -- "$f" "${f%.html}.php"
done

让我们逐行分析代码:

  • 第一行创建一个'for'循环,并循环访问所有以'.html'开头的文件。
  • 第二行适用于列表的每一项,并将文件移至新的文件,将'.html'替换为'.php'。 “ ${file%.html}”部分正在使用shell参数扩展从文件名中删除“ .html”部分。
  • “ done”表示循环段的结尾。

这是将“ mv”与“ find”结合使用以实现与上述相同的示例:

find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \;

'find'命令使用'-exec'选项将当前目录中所有以'.html'结尾的文件一一传递给'mv'。
字符串“ {}”是当前正在处理的文件的名称。

从上面的示例中可以看到,使用'mv'命令重命名多个文件并不是一件容易的事,因为它需要对Bash脚本有充分的了解。

使用“重命名”命令重命名文件

“重命名”命令用于重命名多个文件。
该命令比“ mv”更高级,因为它需要一些正则表达式的基本知识。

“ 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 [OPTIONS] perlexpr files

“重命名”命令将根据指定的“ perlexpr”正则表达式对“文件”进行重命名。
我们可以在此处阅读有关perl正则表达式的更多信息。

以下示例将所有扩展名为“ .html”的文件更改为“ .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)

默认情况下,“重命名”命令不会覆盖现有文件。
传递“ -f”选项以允许覆盖现有文件:

rename -f 's/.html/.php/' \*.html

以下是一些更常见的有关如何使用“重命名”命令的示例:

  • 用下划线替换文件名中的空格
rename 'y//_/' \*
  • 将文件名转换为小写
rename 'y/A-Z/a-z/' \*
  • 将文件名转换为大写
rename 'y/a-z/A-Z/' \*