如何在 Linux 上重命名目录

在 Linux 中重命名目录很容易,而且有很多方法可以实现。从重命名单个目录到查找并重命名多个目录,以下是操作方法。
您的数据是安全的
重命名目录是我们都需要不时做的事情。
我们可能创建了一个目录并拼错了它的名字,但我们想把它改正。通常,目录的用途会随着时间或项目的生命周期发生变化,您希望调整名称以反映其新用途。也许你已经解压了一个存档文件,它创建了一个目录树,目录名是大写的,而你希望它们是小写的。
不管是什么原因。重命名目录不会对其中的数据做任何事情。它更改了该数据的路径,但是您重命名的目录中的文件和目录没有被触及。
不要重命名系统目录。至少可以说,更改系统文件和命令的路径会对计算机的运行产生不利影响。如果您需要使用 sudo
来重命名目录——除非您真的知道自己在做什么——很可能您不应该重命名它。
使用 mv 命令
在最直接的情况下,我们真正需要的只是 mv
命令。这是每个 Linux 发行版的组成部分,因此无需安装。
mv
命令在撰写本文时已有 50 多年的历史。它起源于 Unix 的诞生,当时流行简短而隐秘的命令,可能是为了减少必须通过慢速串行线路从电传打字机和哑终端传输到实际计算机的字符数量。
它实际上代表“移动”,可用于将文件从一个目录移动到另一个目录。如果您将文件移动到它已经存在的相同位置并为其指定一个新名称,则您已经重命名了该文件。我们可以对目录做同样的事情。
该目录下有两个子目录。
ls

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

如果要重命名的目录不在当前目录中,请提供路径和目录名称。
mv ~/htg/old-work ~/htg/archive-2
ls

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

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

该目录已为您重命名。

就这么简单。
重命名命令
如果您的需求比直接重命名目录更复杂,您可能需要使用 rename
命令。这允许您使用 Perl 表达式来重命名文件和目录。它提供了一种更强大、更灵活的重命名目录的方法。
我们将讨论基于 Perl 的 rename
命令。还有一个名为 rename
的旧命令,它是 Linux 核心实用程序的一部分。您可能需要安装我们要使用的 Perl rename
命令。
为了避免与现有的 rename
命令发生名称冲突,Perl rename
命令在 Fedora 上被称为 prename
,而 perl-rename代码 > 在 Manjaro 上。在 Ubuntu 上,
的二进制文件的符号链接。rename
和 prename
命令都是解析为名为 file-rename
因此,在 Manjaro 上,您需要使用 perl-rename
的命令,而在 Fedora 上,它是 prename
。在 Ubuntu 上,您可以使用 rename
或 prename
。
要安装 Perl rename,在 Ubuntu 上你需要输入:
sudo apt install rename

在 Fedora 上,命令是:
sudo dnf install prename

在 Manjaro 上,该包称为 perl-rename
。
sudo pacman -Sy perl-rename

如果您想完成这些示例,请确保您使用适合您的发行版的命令。
重命名的第一步
rename
命令采用 Perl 正则表达式并将它们应用于一个文件或目录,或者一组文件或目录。
在我们的目录中,我们有其他目录的集合。
ls

他们的名字是小写、大写和混合大小写的混合体。我们可以使用合适的表达式将它们全部转换为小写。
rename 'y/A-Z/a-z/' *
ls

所有目录现在都是小写的,无论它们以前是完全大写的,还是包含奇怪的大写字母。
所有的魔力都包含在表达式中。表达式用单引号“”括起来。这就是整个命令的意思。
- y:表示在第一个字符范围内搜索任何字符,并将其替换为第二个字符范围内的相应字符。
- /A-Z/a-z/:第一个范围是“A”到“Z”的所有字母,第二个范围是“a”到“z”的所有字符。< /李>
- *:星号通配符表示将其应用于所有目录。
换句话说,该命令读作“对于所有目录,将任何大写字母交换为等效的小写字母。”
显然,您可以使用 rename
重命名单个目录,尽管这有点矫枉过正。使用 mv
会更快。
rename 's/gamma/epsilon-2/' *
ls

该表达式中的“s”表示替代。它检查每个目录以查看其名称是否为“gamma”。如果是,它将替换为“epsilon-2”。但请注意,这也会匹配名为“gamma-zeta”的目录,例如,将其重命名为“epsilon-2-zeta”。
我们可以通过将字符串开头“^
”和字符串结尾“$
”元字符添加到表达式的第一个子句来避免这种情况。
ls
rename 's/^gamma$/epsilon-2/' *
ls

这使目录“epsilon-2”保持不变。
将重命名与其他命令一起使用
我们可以使用其他命令来定位我们希望 rename
处理的目录。如果我们有一组嵌套目录并且我们想要重命名任何以“-old”结尾的目录以便它们以“-archive”结尾,我们可以通过使用 find
和 xargs
。
我们需要使用 xargs
因为 rename
不接受管道输入。 xargs
命令通过接受管道输入并作为命令行参数添加到另一个命令的命令行来克服该问题。
我们的命令看起来像这样:
find . -depth -type d -name "*-old" | xargs -r rename "s/old$/archive/"
- .:我们告诉 find 在当前目录中开始搜索。当然,这可以是任何路径。
- -depth:使用深度优先搜索。这意味着更深的嵌套子目录的内容在更高的子目录之前被处理。
- -type d:搜索目录,而不是文件。
- -name “*-old”:搜索线索。我们正在寻找名称以“-old”结尾的目录。
- |:我们正在将 find 的输出传送到
xargs
命令。 - xargs -r:
-r
(no run if empty) 表示没有匹配的目录不运行命令。 - rename “s/old$/archive/”:要运行的
rename
命令。
我们的目录树在命令之前看起来像这样。

我们运行我们的命令:

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

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