在我们的工作和生活中,不管我们是程序员还是非程序员,都会遇到一个需求,那就是对一堆文件进行重命名。Windows下有很多优秀的软件可以帮助我们完成这个需求,而在Linux环境下,我们只要敲一些代码就可以完成这个需求。本文将介绍三种最基本的文件重命名方法,因为比较基础,所以老司机可以到此为止。1、rename命令顾名思义,rename命令就是用来重命名文件名的。rename命令有一个非常强大的功能,我们可以用它来修改各种复杂的文件名。不过本文只介绍其最基本的功能,rename其他强大的重命名功能会在后续更新。rename最基本的格式如下:renamesourcestringtargetstringfile其中,sourcestring表示要替换为原文件名的字符串,可以是原文件名的全部或部分;targetstring为要替??换的字符串;File为需要更改文件名的文件列表,可以是一个也可以是多个。现在如果目录下有一堆atb_mod_01.cpp、atb_mod_02.cpp、atb_mod_03.cpp、atb_mod_04.cpp等形式的文件,我们的需求是将文件名中的mod改为adb,那么完成这个要求的命令如下:[alvin@VM_0_16_centosexp3]$lsatb_mod_01.cppatb_mod_02.cppatb_mod_03.cppatb_mod_04.cpp[alvin@VM_0_16_centosexp3]$renamemodadb*[alvin@VM_0_16_centosexp3]$lsatb_adb_01.adb_02atb.cppatb_adb_03.cppatb_adb_04.cpp2。mv命令配合for循环的方法如果我们现在有一堆.txt文件,我们想把它们的后缀改成.cpp。先看完整代码:#!/bin/bashfornamein`ls*.txt`domv$name${name%.txt}.cppdone我们都知道linux中重命名使用mv命令,批量重命名很自然地想到用循环语句嵌套mv命令。这里,我们使用ls*.txt列出当前目录下所有的txt文件,然后将它们一一放入name变量中进行循环运行。在循环体中,我们使用mv命令重命名。这里我们使用${name%.txt}的字符串处理方式,即从name末尾删除匹配.txt的最小部分,将剩余的部分返回。之后,添加.cpp后缀。通过这个操作,我们可以将文件名后缀由.txt改为.cpp。最后,我们使用mv命令来实际更改文件名。3、sed命令配合for循环方式。如果我们现在有一堆文件,文件名的格式是test01.txt、test02.txt、test03.txt、test04.txt,也就是前半部分是英文,后半部分是数字。我们现在要将文件名更改为类似test-01.txt的名称。这一次,我们使用sed命令来完成这个需求。我们先来看看完整的代码。#!/bin/bashforfilein`ls*.txt`donewFile=`echo$file|sed's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'??`mv$file$newFiledone使用ls\*.txt获取所有.txt文件像之前一样。然后用echo命令依次输出,作为sed命令的输入。接下来,到了关键部分。乍一看,sed的命令可能有点吓人,但老司机早就习惯了。反引号中的内容其实就是这样一个基本结构:s/原字符串/替换字符串/这里我们使用分组匹配,即用括号将原字符串按照一定的正则表达式进行分组,后面使用\1,\2,\3...引用之前的分组,从而拼凑出替换字符串中对应的格式。如前所述,原始文件名由前半部分英文和后半部分数字组成。英文可以用[a-z]+表示,数字可以用[0-9]+表示。注意不要忘记加号,这意味着前一个字符的多次重复。然后,我们用1和2来引用前面对应的部分,然后用单杠把它们连接起来,这样就变成了这样:s/([a-z]+)([0-9]+)/\1-\2/因为在不同的shell中,括号和加号可能有不同的含义,所以在前面加了一个转义符,所以就变成了之前看到的样子。之后,同样使用mv命令完成重命名动作。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以和我一起把这本电子书做得更完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
