作者 | 良许

责编 | 仲培艺

在我们的工作生活中,不管是程序员还是非程序员,都会遇到一个需求,那就是对一堆文件进行重命名。在 Windows 下有很多优秀的软件可以帮助我们完成这个需求,而在 Linux 环境下,我们可以简单敲一些代码就可以完成这个需求。

本文将介绍三种最基本的文件重命名方法,因为比较基础,所以老司机可以到此为止。

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

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 命令将这个文件名真正改过来。

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 命令完成重命名动作。

作者:良许,目前就职于一家世界500强外企,专注于Linux应用开发。本文首发于个人公众号「良许Linux」主要分享Linux方面干货,欢迎关注。

声明:本文为作者投稿,版权归其个人所有。


 热 文 推 荐 

☞ 小米推新,黄章怒骂!留给魅族们的时间不多了 | 畅言

☞ 13 岁编程!少年比尔·盖茨如何成为最成功的自学成才程序员?

☞ 漫画 | Linux 并发和竞态问题究竟是什么?

☞ 为什么程序员下班后只关显示器从不关电脑?

☞ 全面剖析企业私有云

☞ 算法警告!该图片涉嫌违规不予显示

☞ 交易机器人春天已来?先看完这篇再说吧

☞ 月入5万,程序员夫人们过上"贵妇"生活了吗?

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

喜欢就点击“好看”吧!

三招快速搞定 Linux 文件批量重命名!相关推荐

  1. 手机视频怎么裁剪时长?教你三招快速搞定

    大家知道手机视频怎么裁剪时长吗?现如今,新媒体行业发达,因为很多地方都需要用到视频文件,所以对视频处理的相关操作是免不了的.那么当你因为视频时长过长,导致视频无法发布的时候,你是怎么做的呢?其实很简单 ...

  2. 计算机设计图片教程,电脑如何抠图?教你一招快速搞定

    电脑抠图是使用软件进行图片处理,去除照片背景得到一张透明背景的图片,便于进行设计创作,抠图对于ps大神是非常简单的事情,可对于一窍不通的新手小白来说用电脑抠图是很困难的事情,但小编今天给大家分享一个抠 ...

  3. Linux下批量重命名文件

    Linux下批量重命名文件 通过rename命令批量重命名文件 基本语法 示例 1. 改变文件扩展名 2. 大写改成小写 3. 更改文件名模式 通过rename命令批量重命名文件 基本语法 renam ...

  4. linux下好用的文件批量重命名软件

    在windows下好用的文件批量重命名工具很多,例如 TC. 在linux下如果会使用rename命令也是一个强大的技能,但是像我这样rename命令记得不熟的人,就需要使用现成的软件作为工具了. 在 ...

  5. 字幕文件批量重命名脚本 —— Linux

    现在更新博客的速度大大降低了,主要还是认为把自己做的题目传上来对别人和自己的帮助都不是很大.行,废话少说,我们切入正题吧. 刚刚闲来无事,想到之前看番的时候,有些另外下载的字幕会和视频名字不匹配,给观 ...

  6. python如何对文件进行批量命名-利用Python对文件批量重命名

    由于要用到对无序的文件进行重命名,以下写了一个脚本,进行批量进行重命名. 基本格式是 i.后缀名 (i 循环条件下的数 ) 1 #coding:utf8 2 import os; 3 4 def re ...

  7. linux批量重命名脚本,Mac / Linux Shell 批量重命名的方法总览

    Linux Shell 批量重命名的方法总览 0.用类似 GPRename 这样的图形软件进行批量重命名 1.删除所有的 .bak 后缀: rename 's/\.bak$//' *.bak 2.把 ...

  8. 如何给文件批量重命名?

    如何给文件批量重命名?作为工作了3年的新媒体运营人,看着电脑里各种素材,视频.图片一大堆.要是出个现场活动的文章及推广,上百上千的照片也是有的.之前也是图省事不做归类和命名,后期找起来简直是眼瞎.之前 ...

  9. 文件批量重命名工具,批量修改文件名的实现思路

    在工作中可能会遇到文件数据成果已经制作完成后,遇到文件命名规则变更,需要对大量文件重命名,甚至修改目录结构的.本文介绍利用FME实现文件批量重命名的解决方法. 因为工作实际情况各不相同,文件重命名规则 ...

最新文章

  1. 小白搞懂了GC全过程,全靠阿里专家12张图
  2. JAVASCRIPT学习笔记----Javascript引用类型
  3. Python基础day08 作业解析【7道 面向对象题目】
  4. iOS开篇——UI之UITextField
  5. java中ajax删除,ajax删除 post方法
  6. 玩转mini2440开发板之【如何使用JLink下载烧录boot程序到NorFlash】
  7. sqlserver 如何把一列分为一行显示_SqlServer数据库如何快速修改表的一列值
  8. 正则表达式 - 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 - Python代码
  9. PVS的内存和存储规划设计
  10. 京东抢购机器人_戴森、科沃斯、SKG...超多大牌低价秒杀!京东电器等你来
  11. java 简单的webshell_Java Web使用JSPX白名单绕过上传WebShell | kTWO-个人博客
  12. C# 根据文本设置combobox的两种方法
  13. 腾讯智慧金融白皮书:区块链将是未来数字经济基础设施
  14. Python知识点-hashlib模块
  15. 电脑没声音,音频设备无法使用。扬声器安装程序unknown
  16. 计算机服务器机房设计方案,机房设计方案.pdf
  17. linux宿主机ssh访问windows10虚拟机
  18. Unity打包的PC项目生成一个EXE文件
  19. 使用CNN预测基因可及性
  20. 鸿蒙系统 新闻,首款鸿蒙系统终端新闻 华为正式发布鸿蒙系统

热门文章

  1. 矩池云python2.7镜像安装opendr
  2. 计算机基础在小学的教学论文,计算机基础教育论文计算机教学改革论文.doc
  3. springboot如何对本地数据库增删改查_SpringBoot 数据库操作 增删改查
  4. Python椭圆加密算法实现区块链信息认证
  5. 水力压裂化学品行业调研报告 - 市场现状分析与发展前景预测
  6. 中国水冷氙气试验箱行业市场供需与战略研究报告
  7. 2021-2025年中国丁基胶粘剂行业市场供需与战略研究报告
  8. android vitamio 教程,使用vitamio开发步骤
  9. android 360状态栏显示,Android高仿UC浏览器和360手机卫士消息常驻栏(通知栏)
  10. 《跟小海龟学Python》部分案例视频集锦