使用 vim 快速对当前文件夹下的文件批量重命名
前言
我们在使用Linux的时候,有很多种方法可以对文件进行重命名,例如 命令行 下的mv命令,或者是使用像dolphin这样的图形文件管理器。但是有时候需要对一个文件夹下的所有文件批量重命名,甚至是递归地重命名当前文件夹下所有以.xxx结尾的文件,这时候你还在手动地一遍遍敲mv命令再一遍遍按 TAB 补全么?
图形化的文件管理器
目前 Linux 社区有好多优质的图形化文件管理器,大多数的风格都与 Windows 大相径庭。就拿我现在用的 KDE 出品的 dolphin 来说,基本上 Windows 能做到的它也可以做到,当然 我没有深究其功能,无法评断好用与否。
但是往往这类文件管理器只能做到一些简单的功能,其出现就是为了那些刚从 Windows 转向 Linux 的人不用付出太多的学习成本,至于好不好用则是见仁见智了。
Vim
vim 已经是一个老生常谈的话题了,不管你用没用过也都应该听说过,毕竟曾经有几百万人在互联网上发问 「如何退出 vim 编辑器」......
那么如何实现批量重命名呢?
先看第一个指令 :read
首先打开 vim (这里我用的是 neovim 两者无差别)

尝试下进入 -命令模式- ,输入
:read !ls

敲一下回车就会发现,vim 把 ls 指令所输出的内容打印到了我们的编辑器中,也就是说,你只需要在命令模式中输入上述指令,便可以将 感叹号 ! 后面的命令的输出内容打印到屏幕上。
不妨再试一下,输入
:read !ls -al

Bingo~
再来看下一个指令 :write
我们先来新建一个文件夹: temp,里面放入一些文件,内容如下:
temp > tree
.
├── a.json
├── b.json
├── c.json
└── dir
├── e.json
└── f.json
# 这里的 tree 只是一个指令,功能是以树形展示目录结构
在 temp 文件夹下输入 vim 来启动 vim,按下 冒号 进入 -命令模式-,输入:
:read !find ./
这将会把当前目录下的所有内容打印出来,包括子文件夹下的内容。

我们现在的目的是要把 所有以 .json 结尾的文件改为 .txt 结尾,使用的命令是 mv。
首先,去掉多余的第一行和目录 ./dir,使用 Ctrl + v 进入 -可视块- 模式,再每一行的最前面加上 mv, 再加一个空格。

之后,便可以再后面新增 更改后的名称,这里如果条目少的话可以手敲,但是如果超过十几行的话就要用到 vim 的 宏 了。
这里简单说明下具体的做法,首先放出按键:
q -> a -> $ -> 5h -> yiw -> $ -> a -> [空格] -> Esc -> p -> a -> .txt -> Esc -> j -> q
一遍一遍试的命令,希望老爷们赏个赞
下面是对每条指令的介绍:
| 指令 | 功能 |
|---|---|
| q | 开始记录 宏 |
| a | 记录宏按键为 a |
| $ | 将光标移动到行尾 |
| 5h | 光标向前移动 5 格 |
| yiw | 复制当前光标所在的单词 |
| $ | 将光标移动到行尾 |
| a | 开始插入 |
| <space> | 插入一个空格 |
| <Esc> | 退回到 -普通- 模式 |
| p | 在光标后粘贴刚才复制的内容 |
| a | 开始插入 |
| .txt | 插入 .txt |
| <Esc> | 退回到 -普通- 模式 |
| j | 光标下移一行 |
| q | 结束录制 宏 |
这样,便实现了下面的效果:

那要怎么执行这几行命令呢?记得我们上面的小标题么?
:write
还是一样,先进入到 -普通- 模式,按一下 冒号 进入 -命令- 模式,输入:
:write !sh
执行一下

虽然改名成功了,但是子目录里的文件全部移动到当前目录下了
(教学事故......)
原因大家也该清楚了,因为 mv 实际上是一个移动文件的指令,我们用它重命名是因为它恰好有这个功能,而在重命名时并没有加目录,所以便会酿成刚刚的惨剧......
没关系,我们再把 e.txt f.txt 移动到 dir 目录下,这次的任务是将 .txt 结尾的文件改成以 .json 结尾。

重复上面的步骤,只是改一下宏命令:
q -> a -> ^ -> f. -> yf. -> $ -> a -> [空格] -> [Esc] -> p -> a -> json -> [Esc] -> j

这回应该没问题了吧,执行一下!
:write !sh

果然,成功改回来了!
使用 vim 快速对当前文件夹下的文件批量重命名的更多相关文章
- C#遍历文件夹下所有文件
FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...
- python 替换 文件夹下的 文件名称 及 文件内容
示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...
- java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面
将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...
- 【转发】du命令 实现Linux 某个文件夹下的文件按大小排序
1. df -lh 2. du -s /usr/* | sort -rn这是按字节排序 3. du -sh /usr/* | sort -rn这是按兆(M)来排序 4.选出排在前面的10个du -s ...
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...
- python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件
命令:os 用到的:os.walk os.listdir 写的爬虫爬的数据,但是又不知道进行到哪了,于是就写了个脚本来统计文件的个数 #统计 /home/dir/ 下的文件夹个数 import o ...
- PHP遍历文件夹下的文件和获取到input name的值
<?php$dir = dirname(__FILE__); //要遍历的目录名字 ->当前文件所在的文件夹//$dir='D:\PHP\wamp\www\admin\hosts\admi ...
- java中File类应用:遍历文件夹下所有文件
练习: 要求指定文件夹下的所有文件,包括子文件夹下的文件 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public ...
- 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数
[转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...
- linux 压缩当前文件夹下所有文件
linux zip压缩.压缩当前文件夹下所有文件,压缩为a.zip.命令行的方法是怎样. zip -r fileName.zip 文件夹名 tar tar命令可以用来压缩打包单文件.多个文件.单个 ...
随机推荐
- java继承当中都有一些什么样的构造函数规则?
6.继承当中的构造函数规则 马克-to-win:继承当中的构造函数规则貌似复杂: 记住我给你的以下几条口诀, 你高枕无忧.1)如果你在某类中写了带参构造函数,系统就不会再为你在那类中自动添加无参构 ...
- 访问控制中默认,public,private,protected区别?
2.继承的访问控制: (比如一个类中的protected成员对于"不同的包中的非子类"是不可见的. 说明:1.任何public的内容可以被从任何地方访问. 2.private的成员 ...
- springboot+springsecurity+mybatis plus之用户认证
一.权限管理的概念 另一个安全框架shiro:shiro之权限管理的描述 导入常用坐标 <dependency> <groupId>org.springframework.bo ...
- 帝国CMS 给简介字段添加一键排版按钮
帝国CMS后台->管理数据表->选择数据表>打开smalltext字段输入表单替换html代码 添加如下代码: <script> function format() { ...
- 利用js获取不同页面间跳转需要传递的参数
获取参数的js函数如下: function GetQueryValue(queryName) { var query = decodeURI(window.location.search.substr ...
- Solon 1.6.36 发布,更现代感的应用开发框架
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...
- Java语言学习day30--8月5日
###10String类的其他方法 * A:String类的其他方法 * a: 方法介绍 * int length(): 返回字符串的长度 * String substring(int beginIn ...
- 共读《redis设计与实现》-数据结构篇
准备将之前攒下的书先看一遍,主要是有个大概的了解,以后用的时候也知道在哪里找.所以准备开几篇共读的帖子,激励自己多看一些书. Redis 基于 简单动态字符串(SDS).双端链表.字典.压缩列表.整数 ...
- ElasticSearch7.3学习(二十一)----Filter与Query对比、使用explain关键字分析语法
1.数据准备 首先创建book索引 PUT /book/ { "settings": { "number_of_shards": 1, "number ...
- 21天学通Python PDF完整版
有需要的点击这里自取 内容简介 · · · · · · <21天学通Python>全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Pyt ...