当前位置: 首页 > 工具软件 > Bash++ > 使用案例 >

Linux批量更改文件名——Bash/Csh

马弘益
2023-12-01


前言

本文旨在纪录在liunx环境下如何批量更改文件名。
本文所有的例子都是为了检测出当前路径下的所有后缀是“.txt”的文件,并更改后缀为“.cpp”。


一、单个文件

对于单个文件的改名,直接在当前目录下终端或shell脚本输入“mv”命令:

mv 111.txt 111.cpp

注: 以下的所有命令一定要注意英文单引号、英文间隔号(和~同键的)的区别。


二、Bash脚本

目前linux环境多为bash环境,编写bash脚本代码如下:

#! /bin/bash
for filename in `ls *.txt`
do
	echo $filename | mv $filename `sed 's/.txt/.cpp/g'`
done

代码解释:
bash中是可以使用for循环的。
循环变量filename是按序检测出来的当前目录下的以.txt为后缀的文件名,每检测出来一个赋给$filename然后执行do循环中的命令。
循环中使用管道和“sed”命令,sed命令是shell语言的重要指令,建议多学习与了解。这里的sed命令就是把filename中的所有“.txt”更改为“.cpp”。
在你想要更改文件名的路径下新建脚本然后chmod赋予权限,或者在其他脚本中插入这一段命令,就可以实现批量更改文件名了。


三、Bash命令行

如果只是需要更改文件名,那只需要在当前路径下的终端命令行输入以下命令:

for f in `ls *.txt`;do	echo $f | mv $f `sed 's/.txt/.cpp/g'`;done

与使用脚本的区别只是在于用“;”代替了回车,从而可以在命令行中输入与执行。


四、Csh

csh中不能用for循环,只有while和foreach循环,采用以下命令:

#! /bin/csh -f
foreach f(`ls *.txt`)
		mv $f `echo $f | sed 's/.txt/.cpp/g'`

如果是csh环境的linux终端,上述命令回车改为空格即可。
一定要注意`和’的区别!!!


总结

灵活使用循环命令,结合mv指令和sed指令,加上管道,即可实现批量修改文件名。
同理,用类似的方法可以对文件进行其他的批量操作。

 类似资料: