5

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

例如 :

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

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

谢谢

4

3 回答 3

15

假设你有myfile.a, myfile.b, myfile.c:

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

这会创建(在删除echonewname.a, newname.b, newname.c.

于 2011-08-20T23:23:24.167 回答
1

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

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

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

于 2011-08-20T23:23:39.877 回答
0

我真的很喜欢 perl 脚本的正则表达式语法rename(由 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

于 2018-04-06T18:40:02.537 回答