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

我们知道,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

使用 for 和 mv 批量修改文件名_第1张图片

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

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

使用 for 和 mv 批量修改文件名_第2张图片

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

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

使用 for 和 mv 批量修改文件名_第3张图片

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

你可能感兴趣的:(其他,linux)