Linux Bash中同目录批量复制并重命名文件的技术咨询
批量复制并重命名模板文件的简便方案
嘿,这个问题我之前也碰到过,完全不用折腾/tmp目录那么麻烦!给你几个简单直接的解决方案,轻松搞定从foo.c/foo.h到bar.c/bar.h的复制重命名:
方法一:Bash参数替换(最通用,无需额外工具)
这是最稳妥的方式,所有支持Bash的环境都能直接用,几行循环就能搞定:
for file in foo.*; do cp "$file" "${file/foo/bar}" done
原理很简单:${file/foo/bar}是Bash的参数替换语法,会把文件名里的foo替换成bar。比如foo.c会变成bar.c,foo.h会变成bar.h,完美实现一对一的复制重命名。
方法二:用mmv工具(更简洁,需提前安装)
如果你的系统允许安装小工具,mmv是专门处理批量重命名/复制的神器,命令超简洁:
mmv 'foo.*' 'bar.#1'
这里的#1代表通配符*匹配到的部分(也就是.c和.h),直接把前缀foo替换成bar即可。如果没装mmv,可以用包管理器安装:比如Debian/Ubuntu用sudo apt install mmv,macOS用brew install mmv。
为什么你之前的方法不行?
cp foo.* bar.*:这个命令的逻辑错误,cp会把所有源文件(foo.c、foo.h)尝试复制到单个目标文件bar.*,但bar.*不是目录,所以会报错或者只保留最后一个文件,根本达不到一对一复制的效果。rename命令:rename是对现有文件重命名,不是复制,它会直接把foo.c改成bar.c(如果bar.c已存在会直接覆盖),完全不符合你“复制模板生成新文件”的需求。
内容的提问来源于stack exchange,提问作者Alex Polleti
相关产品推荐
相关产品推荐

