繁体   English   中英

带有正则表达式的Linux cp

[英]Linux cp with a regexp

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

例如 :

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

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

谢谢

假设你有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。

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

rename "s/OldFile/NewFile/" OldFile*

OldFile.cOldFile.h分别重命名为NewFile.cNewFile.h

我只是想用复制命令完全相同的东西:

copy "s/OldFile/NewFile/" OldFile*

所以我复制了那个脚本并将重命名语句改为通过File::Copy 瞧瞧! 使用perl-regex语法的复制命令:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM