带有正则表达式的Linux cp

时间:2011-08-20 23:16:27

标签: regex linux cp

我想复制目录中的一些文件,重命名文件但保留扩展名。使用正则表达式可以使用简单的cp吗?

例如:

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

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

由于

3 个答案:

答案 0 :(得分:14)

假设您有myfile.amyfile.bmyfile.c

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我非常喜欢require() perl脚本(由Robin Barker和Larry Wall编写)的正则表达式语法,例如:

  

library()

     

renamerename "s/OldFile/NewFile/" OldFile*分别重命名为OldFile.cOldFile.h

我只想用复制命令完全一样:

NewFile.c

所以我复制了该脚本并将重命名语句更改为通过NewFile.h进行复制。瞧瞧!带有perl-regex语法的复制命令:

https://gist.github.com/jcward/0ead33bd79f2061c68728cc82582241f