如何在 Linux 上重命名目录

已发表: 2022-06-16
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com

在 Linux 中重命名目录很容易,并且有很多方法可以解决。 从重命名单个目录到查找和重命名多个目录,以下是操作方法。

您的数据是安全的

重命名目录是我们不时需要做的事情。

我们可能会创建一个目录并拼错它的名称,我们想把它改正。 通常,目录的用途会随着时间或项目的生命周期而变化,您希望调整名称以反映其新用途。 也许您已经解压缩了一个存档文件,它创建了一个目录树,目录名称为大写,您希望它们为小写。

什么是计算机文件和文件夹?
相关什么是计算机文件和文件夹?

不管是什么原因。 重命名目录不会对其中保存的数据做任何事情。 它会更改该数据的路径,但不会触及重命名目录中的文件和目录。

不要重命名系统目录。 至少可以说,更改系统文件和命令的路径将对计算机的运行产生不利影响。 如果你需要使用sudo重命名一个目录——除非你真的知道你在做什么——你很可能不应该重命名它。

使用 mv 命令

在最简单的情况下,我们真正需要的只是mv命令。 这是每个 Linux 发行版不可或缺的一部分,因此无需安装。

广告

mv命令在撰写本文时已有 50 多年的历史。 它源于 Unix 的黎明,当时短而神秘的命令正在流行,可能是为了减少必须通过慢速串行线路从电传打字机和哑终端传输到实际计算机的字符数量。

它实际上代表“移动”,它可以用来将文件从一个目录移动到另一个目录。 如果您将文件移动到它已经存在的相同位置并给它一个新名称,则您已重命名该文件。 我们可以对目录做同样的事情。

此目录中有两个子目录。

 ls 

列出两个子目录

要重命名目录,我们使用 mv 命令。 我们需要提供目录的当前名称和新名称。

 mv old-work archive-2 

使用 mv 重命名目录

如果要重命名的目录不在当前目录中,请提供路径以及目录名称。

 mv ~/htg/old-work ~/htg/archive-2
 ls 

通过在命令行上指定路径,使用 mv 重命名不同目录中的目录

使用文件浏览器

文件浏览器能够重命名目录。 GNOME Files 应用程序中的按键是 F2。 突出显示目录并点击 F2 键打开“重命名文件夹”对话框。

使用fie浏览器重命名目录

广告

输入新名称,然后单击绿色的“重命名”按钮。

在文件浏览器中提供新目录名称

该目录已为您重命名。

文件浏览器窗口中重命名的目录

就这么简单。

重命名命令

如果您的需求比直接重命名目录更复杂,您可能需要使用rename命令。 这允许您使用 Perl 表达式来重命名文件和目录。 它提供了一种更强大、更灵活的方式来重命名目录。

我们将讨论基于 Perl 的rename命令。 还有另一个较旧的命令称为rename ,它是 Linux 核心实用程序的一部分。 您可能需要安装我们要使用的 Perl rename命令。

为了避免名称与现有的rename命令冲突,Perl rename命令在 Fedora 上称为prename ,在 Manjaro 上称为perl-rename 。 在 Ubuntu 上, renameprename命令都是符号链接,可解析为名为file-rename的二进制文件。

因此,在 Manjaro 上,您需要使用perl-rename命令,而在 Fedora 上,它是prename 。 在 Ubuntu 上,您可以使用renameprename

要安装 Perl 重命名,在 Ubuntu 上你需要输入:

 sudo apt install 重命名

在 Ubuntu 上安装重命名

在 Fedora 上,命令是:

 sudo dnf 安装前缀

在 Fedora 上安装 prename

在 Manjaro 上,这个包被称为perl-rename

 sudo pacman -Sy perl-rename 

在 Manjaro 上安装 perl-rename

广告

如果您想完成这些示例,请确保为您的发行版使用适当的命令。

重命名的第一步

rename命令采用 Perl 正则表达式并将它们应用于文件或目录,或文件或目录组。

在我们的目录中,我们有其他目录的集合。

 ls 

大写、小写和大小写混合的目录集合

它们的名称是小写、大写和混合大小写的混合。 我们可以使用合适的表达式将它们全部转换为小写。

 重命名 'y/AZ/az/' *
 ls 

将目录转换为小写名称

所有目录现在都是小写的,无论它们以前是完全大写的,还是包含奇怪的大写字母。

所有的魔法都包含在表达式中。 表达式用单引号“ ' ”括起来。 这就是整个命令的意思。

  • y :这意味着搜索第一个字符范围中的任何字符,并将其替换为第二个字符范围中的相应字符。
  • /AZ/az/ :第一个范围是从“A”到“Z”的所有字母,第二个范围是从“a”到“z”的所有字符。
  • * :星号通配符表示将其应用于所有目录。
广告

换句话说,该命令读作“对于所有目录,将任何大写字母交换为等效的小写字母”。

显然,您可以使用rename重命名单个目录,尽管它确实有点矫枉过正。 使用mv会更快。

 重命名 's/gamma/epsilon-2/' *
 ls 

使用 rename 重命名单个目录

此表达式中的“s”表示替代。 它检查每个目录以查看其名称是否为“gamma”。 如果是,则将其替换为“epsilon-2”。 但请注意,这也会匹配一个名为“gamma-zeta”的目录,例如,将其重命名为“epsilon-2-zeta”。

我们可以通过在表达式的第一个子句中添加字符串“ ^ ”的开头和字符串“ $ ”的结尾元字符来避免这种情况。

 ls
 重命名 's/^gamma$/epsilon-2/' *
 ls 

将重命名操作仅限于整个目录名称

这使目录“epsilon-2”保持不变。

将重命名与其他命令一起使用

我们可以使用其他命令来定位我们想要rename的目录。 如果我们有一组嵌套目录,并且我们想要重命名以“-old”结尾的任何目录,以便它们以“-archive”结尾,我们可以通过使用findxargs来实现。

如何在 Linux 上使用 xargs 命令
相关如何在 Linux 上使用 xargs 命令

我们需要使用xargs因为rename不接受管道输入。 xargs命令通过接受管道输入并作为命令行参数添加到另一个命令的命令行来克服该问题。

我们的命令如下所示:

 寻找 。 -depth -type d -name "*-old" | xargs -r 重命名“s/old$/archive/”
  • . : 我们告诉 find 在当前目录中开始搜索。 当然,这可以是任何路径。
  • -depth :使用深度优先搜索。 这意味着更深的嵌套子目录的内容在更高的子目录之前被处理。
  • -type d :搜索目录,而不是文件。
  • -name “*-old” :搜索线索。 我们正在寻找名称以“-old”结尾的目录。
  • | :我们将 find 的输出通过管道传输到xargs命令中。
  • xargs -r-r (如果为空则不运行)表示如果没有匹配的目录则不运行命令。
  • rename “s/old$/archive/” :要运行的rename命令。

我们的目录树在命令之前看起来像这样。

我们重命名命令之前的目录树

我们运行我们的命令:

我们使用 find、xargs 和 rename 的重命名命令

广告

我们可以看到所有匹配的目录,包括嵌套目录都已重命名。

重命名命令后的目录树

课程用马

重命名目录只需要mv 。 如果您更喜欢 GUI 应用程序,您可以使用文件浏览器。 如果你有很多目录要重命名,特别是如果它们分散在整个目录树中,你将需要rename的灵活性。

相关:如何从 Linux 终端管理文件:您需要知道的 11 个命令