初始化创建测试文件:

# touch test_{1..10}.log

# ls
test_1.log  test_2.log  test_3.log  test_4.log  test_5.log  test_6.log  test_7.log  test_8.log  test_9.log test_10.log  

方式 一:mv

使用mv进行批量替换:

# ①、批量替换文件中“_”字符为"-"字符
# find ./ -name "*_*" | while read f; do mv $f ${f/_/-}; done

# ②、批量替换文件中“test”字符为"TEST"字符
# ls | while read f; do mv $f ${f/test/TEST}; done 

> 引申,文件中的文本替换为:

# A). 对于单个文件
# sed -i 's/string1/string2/g' example.txt 
说明:将example.txt文件中的 "string1" 替换成 "string2"(如果不加-i参数,则在内存中替换; 添加-i参数,则在文件中直接替换)
# B). 对于多个文件
# $ ls|while read f; do sed -i 's/beijing/shanghai/g' $f; done

方式 二:rename

linux的rename命令有两个版本,一个是c语言版本的,一个是perl语言版本的,一般内置的都是C语言版本的

2.1 C语言版本格式:rename 原字符串 新字符串 文件名
例子:将文件名中的“test”批量替换为“TEST”

# rename test TEST test_*.log

# ls
# TEST_10.log  TEST_1.log  TEST_2.log  TEST_3.log  TEST_4.log  TEST_5.log  TEST_6.log  TEST_7.log  TEST_8.log  TEST_9.log

2.2 Perl语言版本格式:rename ‘s/原字符串/新字符串/’ 文件名

perl版的rename因其支持正则表达式,使用更广泛:

例子:

字母的替换rename "s/AA/aa/" * //把文件名中的AA替换成aa
修改文件的后缀rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
批量添加文件后缀rename "s/$//.txt/" * //把所有的文件名都以txt结尾
批量删除文件名rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐