Linux的CP与正则expression式

我想复制目录中的一些文件,重命名文件,但保留扩展名。 这是可能的一个简单的cp ,使用正则expression式

例如 :

 cp ^myfile\.(.*) mydir/newname.$1 

所以我可以复制保存扩展名的文件,但重命名它。 有没有办法获得匹配的元素在cp正则expression式中使用它的命令? 如果没有,我会做一个Perl脚本,我想,或者如果你有另一种方式…

谢谢

Solutions Collecting From Web of "Linux的CP与正则expression式"

假设你有myfile.amyfile.bmyfile.c

 for i in myfile.*; do echo mv "$i" "${i/myfile./newname.}"; done 

这创建(删除echonewname.anewname.bnewname.c

shell不了解一般的正则表达式; 你必须外包给辅助程序。 解决你的任务的经典脚本方式将是类似的

 for a in myfile.* ; do b=`echo $a | sed 's!^myfile!mydir/newname!'` cp $a $b done 

或者让一个perl脚本生成一个命令列表,然后将其输入到shell中。