如何在Linux上使用rename命令

Linux笔记本电脑显示bash提示Fatmawati Achmad Zaenuri / Shutterstock.com

掌握Linux世界的文件重命名强大并给予 MV– 和你自己 – 休息。 改名 灵活,快速,有时甚至更容易。这是一个命令强大的教程。

mv有什么问题?

这没什么不对 MV 。该命令做得很好,它可以在所有Linux发行版,macOS和其他类Unix操作系统中找到。所以它总是可用的。但有时你只需要推土机,而不是铲子。

MV 命令在生活中有目的,那就是移动文件。这是一个令人高兴的副作用,它可用于将现有文件移动到具有新名称的新文件中。净效果是重命名文件,因此我们得到了我们想要的。但 MV 不是专用的文件重命名工具。

用mv重命名单个文件

使用 MV 重命名文件类型 MV,空格,文件名,空格以及您希望文件具有的新名称。然后按Enter键。

您可以使用 LS 检查文件是否已重命名。

mv oldfile.txt newfile.txt
ls * .txt

终端窗口中的mv oldfile.txt newfile.txt

用mv重命名多个文件

当您想要重命名多个文件时,事情会变得棘手。 MV 没有能力处理重命名多个文件。你必须使用一些漂亮的Bash技巧。如果你知道一些中级命令行fu,那就没问题了,但重命名多个文件的复杂性 MV 与易用性形成鲜明对比 MV 重命名单个文件。

事情迅速升级。

假设我们有一个目录中包含各种不同类型的文件。其中一些文件具有“.prog”扩展名。我们想在命令行重命名它们,以便它们具有“.prg”扩展名。

我们如何争吵 MV 为我们这样做?我们来看看这些文件。

ls * .prog -l

ls * .prog -l在终端窗口中

这是一种不用编写实际Bash脚本文件的方法。

for f in * .prog;做mv – “$ f”“$ f%.prog .prg”

for f in * .prog;在终端窗口中执行mv  - “$ f”“$ f%.prog .prg”

DId有用吗?让我们检查文件,看看。

ls * .pr *

ls * .pr *在终端窗口中

所以,是的,它奏效了。它们现在都是“.prg”文件,目录中没有“.prog”文件。

刚刚发生了什么?

这个长命令究竟做了什么?让我们分解吧。

for f in * .prog;做mv – “$ f”“$ f%.prog .prg”

第一部分启动一个循环,依次处理目录中的每个“.prog”文件。

下一部分说明了处理过程。它正在使用 MV 将每个文件移动到一个新文件。新文件将以原始文件的名称命名,不包括“.prog”部分。将使用“.prg”的新扩展名。

必须有一个更简单的方法

明确地。它是 改名 命令。

改名 不是标准Linux发行版的一部分,因此您需要安装它。它在Linux的不同系列中也有不同的名称,但它们都以相同的方式工作。您只需根据您正在使用的Linux风格替换相应的命令名称。

在您安装的Ubuntu和Debian派生的发行版中 改名 像这样:

sudo apt-get install重命名

sudo apt-get install在终端窗口中重命名

在您安装的Fedora和RedHat派生的发行版中 女士prename 像这样。注意最初的“p”代表Perl。

sudo dnf安装prename

sudo dnf在终端窗口中安装prename

要在Manjaro Linux中安装它,请使用以下命令。请注意,将调用重命名命令 Perl的重命名

sudo pacman -Syu perl-rename

sudo pacman -Syu perl-rename在终端窗口

让我们再做一次

而这次我们将使用 改名。我们将回滚时钟,以便我们有一组“.prog”文件。

ls * .prog

ls * .prog在终端窗口中

现在让我们使用以下命令重命名它们。然后我们会检查 LS 是否有效。记得替换 改名 如果您没有使用Ubuntu或Debian派生的Linux,请使用适当的Linux命令名称。

重命名's / .prog / .prg /'* .prog
ls * .pr *

在终端窗口中重命名's / .prog / .prg /'* .prog“width =”646“height =”147“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(这个);“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

这工作,他们现在都是“.prg”文件,并且目录中没有“.prog”文件。

这个时间发生了什么?

让我们用三个部分解释一下魔法。

第一部分是命令名称, 改名 (要么 女士prename 要么 Perl的重命名 ,对于其他发行版)。

最后一部分是 * .prog,告诉 改名 操作所有“.prog”文件。

中间部分定义了我们想要对每个文件名进行的工作。该 小号 意味着替代。第一个任期(.prog) 是什么 改名 将搜索每个文件名和第二个术语(.PRG)它将被取代。

命令的中间部分或中心表达式是一个Perl'正则表达式',它是给出的 改名 掌握其灵活性。

更改文件名的其他部分

到目前为止,我们已经更改了文件扩展名,让我们修改文件名的其他部分。

在目录中有很多C源代码文件。所有文件名都以“slang_”为前缀。我们可以检查一下 LS

ls sl * .c

ls sl * .c在终端窗口“width =”646“height =”212“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“onerror =”this。的onerror = NULL; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

我们将用“sl_”替换所有出现的“slang_”。命令的格式对我们来说已经很熟悉了。我们只是更改搜索字词,替换字词和文件类型。

重命名's / slang_ / sl_'* .c

在终端窗口中重命名's / slang_ / sl_'* .c“width =”646“height =”77“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this); “onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

这次我们正在寻找“.c”文件,并搜索“slang_”。每当在文件名中找到“slang_”时,它将被替换为“sl_”。

我们可以通过重复检查该命令的结果 LS 上面的命令使用相同的参数:

ls sl * .c

ls sl * .c在终端窗口“width =”646“height =”197“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“onerror =”this。的onerror = NULL; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

删除部分文件名

我们可以通过替换搜索项来删除文件名的一部分。

ls * .c
重命名's / sl _ //'* .c
ls * .c

在终端窗口中重命名's / sl _ //'* .c“width =”646“height =”352“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this); “onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

我们可以从中看到 LS 命令我们的“.c”文件都以“sl_”为前缀。让我们完全摆脱它。

改名 命令遵循与以前相同的格式。我们将要寻找“.c”文件。搜索词是“sl_”,但没有替换词。它们之间没有任何东西的两个反斜杠意味着什么,一个空字符串。

改名 将依次处理每个“.c”文件。它将在文件名中搜索“sl_”。如果找到它,它将被替换为空。换句话说,删除搜索词。

第二次使用了 LS 命令确认已从每个“.c”文件中删除“sl_”前缀。

限制对文件名特定部分的更改

我们来使用吧 LS 查看文件名中包含字符串“param”的文件。然后我们会用 改名 用字符串“parameter”替换该字符串。我们会用的 LS 再一次看到效果了 改名 命令对这些文件有影响。

ls * param *
重命名's / param /参数'* .c
ls * param *

在终端窗口中重命名's / param /参数'* .c“width =”646“height =”197“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this); “onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

发现四个文件在其文件名中有“param”。 param.c,param_one.c和param_two.c在其名称的开头都有“param”。 third_param.c在其名称末尾有“param”,就在扩展名之前。

改名 命令将在文件名中的任何地方搜索“param”,并在所有情况下将其替换为“parameter”。

第二次使用了 LS 命令告诉我们,这正是发生的事情。无论“param”是在文件名的开头还是末尾,它都被“参数”取代。

我们可以使用Perl的元字符来细化中间表达式的行为。元字符是表示字符位置或序列的符号。例如, ^ 意思是“字符串的开头” $ 意思是“字符串的结尾”,和 表示任何单个字符(除了换行符)。

我们将使用字符串元字符的开头( ^ )将我们的搜索限制在文件名的开头。

ls * param * .c
重命名's / ^参数/值/'* .c
ls * param * .c
ls值* .c

在终端窗口中重命名's / ^参数/值/'* .c“width =”646“height =”247“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this );“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

我们列出了之前重命名的文件,我们可以看到字符串“parameter”位于三个文件名的开头,它位于其中一个文件名的末尾。

我们的 改名 命令使用行的开头 (^)搜索词“参数”之前的元字符。这告诉我 改名 如果它位于文件名的开头,则仅考虑已找到的搜索词。如果搜索字符串“参数”在文件名中的任何其他位置,则将忽略它。

检查 LS,我们可以看到文件名末尾有“参数”的文件名没有被修改,但是在名称开头有“参数”的三个文件名已经用替换术语“值”替换了搜索字符串“。

的力量 改名 在于Perl的力量。 Perl的所有功能都可供您使用。

使用分组搜索

改名 还有更多的伎俩。让我们考虑一下你的名字中可能包含类似字符串的文件的情况。它们不是完全相同的字符串,因此简单的搜索和替换在这里不起作用。

在这个例子中我们使用 LS 检查我们以“str”开头的文件。它们有两个,string.c和strangle.c。我们可以使用称为分组的技术一次重命名两个字符串。

这个的中心表达 改名 命令将搜索具有字符序列“stri”或“stra”的文件名中的字符串,其中这些序列后面紧跟“ng”。换句话说,我们的搜索词将寻找“string”和“strang”。替换术语是“爆炸”。

ls str * .c
重命名's /(stri | stra)ng / bang /'* .c
ls ban * .c

在终端窗口中重命名's /(stri | stra)ng / bang /'* .c“width =”646“height =”197“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages .loadIfVisibleAndMaybeBeacon(this);“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

运用 LS 第二次确认string.c已成为bang.c而strangle.c现在是bangle.c。

使用翻译重命名

改名 命令可以对称为翻译的文件名执行操作。翻译的一个简单示例是将一组文件名强制为大写。

在里面 改名 以下命令通知我们没有使用 S / 开始中心表达,我们正在使用 Y /。这说明 改名 我们没有进行替换;我们正在进行翻译。

A-Z term是Perl表达式,表示从a到z的序列中的所有小写字符。同样, A-Z term表示从A到Z的序列中的所有大写字母。

此命令中的中心表达式可以解释为“如果在文件名中找到从a到z的任何小写字母,则用从A到Z的大写字符序列中的相应字符替换它们。”

要强制所有“.prg”文件的文件名为大写,请使用以下命令:

重命名'y / a-z / A-Z /'* .prg

ls * .PRG

在终端窗口中重命名'y / az / AZ /'* .prg“width =”646“height =”147“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this) ;“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

LS 命令向我们显示所有“.prg”文件名现在都是大写的。事实上,要严格准确,它们不再是“.prg”文件。他们是“.PRG”文件。 Linux区分大小写。

我们可以通过反转该位置来反转最后一个命令 A-ZA-Z 中心表达中的术语。

重命名'y / A-Z / a-z /'* .PRG

ls * .prg

在终端窗口中重命名'y / AZ / az /'* .PRG“width =”646“height =”147“src =”/ pagespeed_static / 1.JiBnMqyl6S.gif“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this) ;“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);

你(Wo | Do)不会在五分钟内学习Perl

掌握Perl是值得的。但要开始使用的节省时间的功能 改名 命令,你不需要掌握很多Perl知识就可以获得强大的功能,简单性和时间上的巨大好处。

body #primary .entry-content ul#nextuplist list-style-type:none; margin-left:0px; padding-left:0px;
body #primary .entry-content ul#nextuplist li a text-decoration:none; color:#1d55a9;

请阅读下一步

  • >您的华为或荣誉电话将会发生什么?
  • >智能插头会为自己付费吗?
  • >硬件安全密钥继续召回;他们安全吗?
  • > Google云端硬盘和照片分裂:您需要了解的内容
  • >这就是为什么iOS 13让我想要一部iPhone
本文机器自动生成,不保证语句完整通顺和表达准确,亦不对内容真实有效性负责,请读者知悉。