如何在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”扩展名。

我们如何争相为我们做这件事?我们来看看这些文件。

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-rename。

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“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“onerror =”this.onerror = null ; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

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

这个时间发生了什么?

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

第一部分是命令名称,重命名(或其他发行版的prename或perl-rename)。

最后一部分是* .prog,它告诉rename对所有“.prog”文件进行操作。

中间部分定义了我们想要对每个文件名进行的工作。这意味着替代。第一个术语(.prog)是重命名将在每个文件名中搜索的内容,第二个术语(.prg)是它将被替换的内容。

命令的中间部分或中心表达式是Perl'正则表达式',它赋予rename命令灵活性。

更改文件名的其他部分

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

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

ls sl * .c

ls sl * .c在终端窗口中“width =”646“height =”212“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this) ;

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

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

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

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

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

ls sl * .c

ls sl * .c在终端窗口中“width =”646“height =”197“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“onerror =”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this) ;

删除部分文件名

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

ls * .c

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

ls * .c

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

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

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

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

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

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

让我们使用ls来查看文件名中包含字符串“param”的文件。然后我们将使用rename将字符串“parameter”替换为该字符串。我们将再次使用ls来查看rename命令对这些文件的影响。

ls * param *

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

ls * param *

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

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

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

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

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

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

ls * param * .c

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

ls * param * .c

ls值* .c

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

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

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

使用ls进行检查,我们可以看到文件名末尾带有“parameter”的文件名尚未修改,但在名称开头有“参数”的三个文件名已将替换为替换的搜索字符串术语“价值”。

重命名的力量在于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“onload =”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“onerror =”this。的onerror = NULL; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(本);

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

使用翻译重命名

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

在下面的重命名命令中,请注意我们没有使用s /来启动中心表达式,我们使用y /。这告诉重命名我们没有进行替换;我们正在进行翻译。

a-z术语是Perl表达式,表示从a到z的序列中的所有小写字符。类似地,A-Z术语表示从A到Z的序列中的所有大写字母。

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

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

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

ls * .PRG

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

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

我们可以通过反转中心表达式中a-z和A-Z项的位置来反转最后一个命令。

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

ls * .prg

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

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

掌握Perl是值得的。但是要开始使用rename命令的省时功能,您根本不需要掌握很多Perl知识就可以在功耗,简单性和时间方面获得很大的好处。

请阅读下一步

  • >如何阻止人们窃取您的点评
  • >为什么流媒体服务需要为HD和4K充电?
  • >如何流UFC 238 Cejudo vs. Moraes Online
  • >如何在Windows 10上输入Kaomoji(╯°□°)╯(┻━┻
  • >如何在线观看2019年FIFA女足世界杯(无线)

资讯来源:由0x资讯编译自HOWTOGEEK。版权归作者Dave McKay所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢