前言

我们在使用 Linux 的时候,有很多种方法可以对文件进行重命名,例如 命令行 下的 mv 命令,或者是使用像 dolphin 这样的图形文件管理器。但是有时候需要对一个文件夹下的所有文件批量重命名,甚至是递归地重命名当前文件夹下所有以 .xxx 结尾的文件,这时候你还在手动地一遍遍敲 mv 命令再一遍遍按 TAB 补全么?

图形化的文件管理器

目前 Linux 社区有好多优质的图形化文件管理器,大多数的风格都与 Windows 大相径庭。就拿我现在用的 KDE 出品的 dolphin 来说,基本上 Windows 能做到的它也可以做到,当然 我没有深究其功能,无法评断好用与否。

但是往往这类文件管理器只能做到一些简单的功能,其出现就是为了那些刚从 Windows 转向 Linux 的人不用付出太多的学习成本,至于好不好用则是见仁见智了。

Vim

vim 已经是一个老生常谈的话题了,不管你用没用过也都应该听说过,毕竟曾经有几百万人在互联网上发问 「如何退出 vim 编辑器」......

那么如何实现批量重命名呢?

先看第一个指令 :read

首先打开 vim (这里我用的是 neovim 两者无差别)

尝试下进入 -命令模式- ,输入

:read !ls

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

不妨再试一下,输入

: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 快速对当前文件夹下的文件批量重命名的更多相关文章

  1. C#遍历文件夹下所有文件

    FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...

  2. python 替换 文件夹下的 文件名称 及 文件内容

    示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...

  3. java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

    将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...

  4. 【转发】du命令 实现Linux 某个文件夹下的文件按大小排序

    1. df -lh 2. du -s /usr/* | sort -rn这是按字节排序 3. du -sh /usr/* | sort -rn这是按兆(M)来排序 4.选出排在前面的10个du -s ...

  5. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  6. python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件

    命令:os 用到的:os.walk   os.listdir 写的爬虫爬的数据,但是又不知道进行到哪了,于是就写了个脚本来统计文件的个数 #统计 /home/dir/ 下的文件夹个数 import o ...

  7. PHP遍历文件夹下的文件和获取到input name的值

    <?php$dir = dirname(__FILE__); //要遍历的目录名字 ->当前文件所在的文件夹//$dir='D:\PHP\wamp\www\admin\hosts\admi ...

  8. java中File类应用:遍历文件夹下所有文件

    练习: 要求指定文件夹下的所有文件,包括子文件夹下的文件 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public ...

  9. 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数

    [转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...

  10. linux 压缩当前文件夹下所有文件

    linux zip压缩.压缩当前文件夹下所有文件,压缩为a.zip.命令行的方法是怎样. zip  -r fileName.zip  文件夹名 tar tar命令可以用来压缩打包单文件.多个文件.单个 ...

随机推荐

  1. 动态添加HTML时onclick函数参数传递

    onclick函数动态传参 1.参数为数值类型时: var tmp = 123; var strHTML = "<div onclick=func(" + tmp + &qu ...

  2. EL表达式详解(常用表达式以及取值)

    EL表达式 学习总结 一. El表达式概念 二. El中的表达式 1. 算术表达式 2. 比较表达式 3. 逻辑表达式 4. 三元表达式 5. 判空表达式 三.EL 从四个作用域中取值 1. 概念 2 ...

  3. 自定义API(Jar包)的创建与使用(简单实现案例)

    @ 目录 学习内容 1. 自定义工具类 2. 导出jar 3. 加载Jar包 4. 调用自定义的API方法 总结 学习内容 1. 自定义工具类 新建一个java项目,然后创建包和工具类StringUt ...

  4. 在 M1 Mac 上开发 .NET MAUI (iOS)

    在 M1 Mac 上开始使用 .NET MAUI 开发 (iOS) 的最简单方法. .NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动 ...

  5. pytest-mark 参数化

    在类前或用例前用pytest.mark.parametrize ,可进行参数化 传参方式比较灵活,有很多种,下面是列出的几种方式,其他的可自行研究 @pytest.mark.parametrize(& ...

  6. An=n的前n项和的前n项和

    #include<iostream> using namespace std; int main() { int n,a=0,b=0; cin>>n; for(int i=1; ...

  7. phpshe xml注入

    *php商城系统 xml注入* **页面样式* *Xml原理参考:* https://www.cnblogs.com/20175211lyz/p/11413335.html *漏洞函数simplexm ...

  8. 帝国cms插件 解决后台修改信息时内容关键字不替换的问题

    很多站长是不是发现了帝国cms增加信息时,是有关键词替换的,这样是有利于网站优化排名. 但是在后台格式化数据之后,再去进行修改之后,对不起,内容关键字就实效了. 针对这一问题,解决方案如下: 找到 / ...

  9. BurpSuite与Xray多级代理实现联动扫描

    Xray是长亭科技推出的,最经典的莫过于代理模式下的被动扫描,它使得整个过程可控且更加精细化: 代理模式下的基本架构为,扫描器作为中间人,首先原样转发流量,并返回服务器响应给浏览器等客户端,通讯两端都 ...

  10. 2021.07.18 P2290 树的计数(prufer序列、组合数学)

    2021.07.18 P2290 树的计数(prufer序列.组合数学) [P2290 HNOI2004]树的计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.pru ...