使用 for 和 mv 批量修改文件名

本文介绍了如何在Linux中利用bashshell的for循环和sed工具,批量将beforeN.dat类型的文件名转换为afterN.dat,即使面对大量文件也能高效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,linux 中可以使用 mv 命令来移动或者重命名文件和目录,且不会改变 inode 编号和时间戳。其语法如下:

mv [-f | -i | -n] [-hv] source target
mv [-f | -I | -n] [-v] source … directory

但是,mv 命令一次只能操作一个文件或者目录,如果现在我有好几个文件甚至好几百个文件需要处理,是不是就不能用 mv 来实现?

先看测试目录下的文件,这里有 9 个 beforeN.dat 的文件,需要把他们的文件名都改成 afterN.dat 的格式。
修改名称前的文件
(这里只有 9 个文件,想一个一个修改也不是不可以。。。这里只是举例。。。)

bash shell 提供了 for 命令,允许用户创建一个遍历一系列值的循环,以此来重复执行一系列命令。

比如这里我想找出所有符合 beforeN.dat 格式的文件,那么可以使用如下指令:

$ for file in `ls before*.dat`;do echo $file;done

查找符合指定格式名称的文件

稍微修改一下上面的指令,使输出的文件名转换成指定的格式,即把文件名中的 before 改成 after
sed 编辑器可以根据命令来处理数据流中的数据,这正是我们所需要的。
修改后的指令如下:

$ for file in `ls before*.dat`;do echo $file | sed s/before/after/;done

查找符合的文件名称修改后输出

这是不是就是想要的格式。
现在,只需要把 echo 换成 mv 命令再调整一下就好啦!
最终版本:

for file in `ls before*.dat`;do mv -v $file `echo $file | sed s/before/after/`;done

在这里插入图片描述

注意,这里的 -v 参数不是必须的,完全可以省略,只是为了跟直观地看一下修改的过程而已。

Linux 中,`find` `mv` 命令可以结合起来用于批量修改文件名。这通常涉及到先查找特定模式下的所有目标文件,然后逐个对它们应用新的名称。 下面是一个简单的例子: 假设你在 `/path/to/directory` 目录下有一系列图片文件,并且你想把所有的 `.jpg` 文件改名为在其原有基础上加上前缀 `"old_"`。你可以这样做: ```bash cd /path/to/directory # 进入你要操作的目标目录 for file in $(find . -type f -name "*.jpg"); do mv "$file" "$(dirname $file)/old_$(basename $file)"; done; ``` 这段命令的工作原理: 1. 使用 `-type f` 来指定只找常规文件而不是其他类型的节点如目录; 2. `-name "*.jpg"` 指定了我们要匹配的是以 `.jpg` 结尾的所有文件。 3. 接着我们遍历每一个找到的文件,在循环体内将当前处理到的每个文件重命名:保留原有的路径部分不变(`dirname`)而只是改变其基本名称的部分 (`basename`)。 请注意上面的例子是最基础的形式;实际场景可能会更复杂一些,例如需要替换掉一部分文本、添加数字序列等等。此外,对于包含空格或其他特殊字符在内的文件名应特别小心地引用变量以免引起意外的结果。 如果你想要给文件名附加递增编号的话,则可以用类似这样的脚本片段代替上述内容中的简单拼接字符串的方式: ```bash i=0; find ... | while read line ;do i=$((i+1)); echo "mv \"$line\" \"${line%.txt}_$i.txt\" ";done ``` 这里通过设置计数器 `$i` 实现了自动增加序号的效果。 **重要提示**: 修改大量文件之前最好备份一下数据以防万一出错!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值