使用Shell批量修改文件后缀名

5,035 阅读1分钟

背景

周末要将一个项目改造成TS,所以需要将所有文件的后缀名改为ts,有些IDE已经支持这个功能了,但是心血来潮,决定用shell脚本改一下

文件查找

使用find命令将需要查找的文件输出到指定文件中,因为可能文件目录比较多,我就定义了一个数组,使用循环输入,将其输出到了一个临时文件中,这里的 > 为导出文件流,且覆盖指定文件,如果使用 >>则为追加,这里面注意循环数组我用的是${pathList[*]},如果这里是$pathList则默认导出数组第一项

# 定义文件地址
pathList=("./routes/" "./public/" "./views/")
for p in ${pathList[*]}
do
	find $p -type f -name '*.js' > file.txt
done

正则替换

这块本来想使用sed命令的,奈何只支持文件,不支持字符串,也可能我没找到方法,于是采用字符串正则替换,字符串替换语法为(源字符串/正则匹配规则/替换字符串)

for f in `cat ./file.txt`
do
	path=${f/\.js/\.ts}
	mv $f $path
done

删除临时文件

rm -rf ./file.txt

总结

代码很简单,但是让我又一次熟悉了shell,在我们使用nodejs的过程中如果结合shell处理文件,可能会比原生nodejs要好很多,下面把完整代码粘贴出来

#!/bin/bash

# 定义文件地址
pathList=("./routes/" "./public/" "./views/")
# 找到文件
for p in ${pathList[*]}
do
	find $p -type f -name '*.js' > file.txt
done

for f in `cat ./file.txt`
do
	path=${f/\.js/\.ts}
	mv $f $path
done
rm -rf ./file.txt