乐趣区

关于linux:教你三招快速文件批量重命名方法

在咱们的工作生存中,不论是程序员还是非程序员,咱们都会遇到过一个需要,那就是对一堆的文件进行重命名。在 Windows 下有很多优良的软件能够帮忙咱们实现这个需要,而在 Linux 环境下,咱们能够简略敲一些代码就能够实现这个需要。

本文良许将介绍三种最根本的文件重命名办法,因为比拟根本,所以老司机能够到此为止。

1. rename 命令

顾名思义,rename 命令就是用来进行重命名文件名的。rename 命令有十分弱小的性能,咱们能够用它来实现各种各样简单的文件名的批改。然而,本文只介绍它最最根本的性能,前期再更新 rename 其它弱小的重命名性能。rename 的最根本的格局如下:

rename 源字符串 指标字符串 文件 

其中,源字符串示意原文件名须要替换的字符串,能够是原文件名的全副或局部;指标字符串就是想要替换成的字符串;文件就是须要更改文件名的文件列表,能够是一个或多个。

现如果目录下有一堆 atb_mod_01.cpp,atb_mod_02.cpp,atb_mod_03.cpp,atb_mod_04.cpp 等模式的文件,咱们的需要是将文件名中的 mod 改成 adb,那么实现这个需要的命令如下:

[alvin@VM_0_16_centos exp3]$ ls
atb_mod_01.cpp  atb_mod_02.cpp  atb_mod_03.cpp  atb_mod_04.cpp
[alvin@VM_0_16_centos exp3]$ rename mod adb *
[alvin@VM_0_16_centos exp3]$ ls
atb_adb_01.cpp  atb_adb_02.cpp  atb_adb_03.cpp  atb_adb_04.cpp

2. mv 命令配合 for 循环形式

如果咱们当初有一堆 .txt 文件,咱们想将它们的后缀改成 .cpp。先来看残缺的代码:

#!/bin/bash

for name in `ls *.txt`
do
    mv $name ${name%.txt}.cpp
done

咱们都晓得,在 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/bash

for file in `ls *.txt`
do
     newFile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
     mv $file $newFile
done

后面一样用 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 学习路线图 ,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!

收费送给大家,只求大家金指给我点个赞!

电子书 | Linux 开发学习路线图

也心愿有小伙伴能退出我,把这份电子书做得更完满!

有播种?心愿老铁们来个三连击,给更多的人看到这篇文章

举荐浏览:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 反对搜寻的资源网站
退出移动版