如何在同目录下批量复制并重命名01开头.sh文件为02-05开头版本
Bash批量复制替换文件名前缀方案
原代码报错原因
你编写的cp通配符写法不支持批量替换文件名:Bash执行命令前会先把通配符展开为所有匹配的文件名列表,当cp接收多个源文件参数时,要求最后一个参数必须是目标目录,因此无法实现逐个修改文件名前缀的效果。
实现代码
以下为原生Bash实现,无需安装额外工具,逻辑稳定:
#!/bin/bash # 外层循环遍历要生成的前缀数字2~5,对应02~05的前缀 for prefix in {2..5}; do # 内层循环遍历所有原始的01开头的目标文件 for src_file in 01*_AAA_*.sh; do # 替换前缀:去掉源文件名开头的01,拼接新前缀0${prefix} dest_file="0${prefix}${src_file#01}" # 执行复制,-- 用于兼容特殊开头的文件名 cp -- "$src_file" "$dest_file" done done
验证方法
运行脚本前可先将cp --替换为echo cp --,执行后会打印所有待执行的复制命令,确认文件名替换规则符合预期后,再换回cp --实际执行即可。
内容的提问来源于stack exchange,提问作者exsonic01
相关产品推荐
相关产品推荐

