我想复制目录中的一些文件,重命名文件但保留扩展名。这可以通过简单cp的使用正则表达式来实现吗?
例如 :
cp ^myfile\.(.*) mydir/newname.$1
所以我可以复制保留扩展名但重命名的文件。有没有办法让cp正则表达式中的匹配元素在命令中使用它?如果没有,我会做一个我认为的 perl 脚本,或者如果你有其他方法......
谢谢
假设你有myfile.a, myfile.b, myfile.c:
for i in myfile.*; do echo mv "$i" "${i/myfile./newname.}"; done
这会创建(在删除echo)newname.a, newname.b, newname.c.
shell 不理解一般的正则表达式;为此,您必须外包给辅助程序。解决您的任务的经典脚本方式类似于
for a in myfile.* ; do
b=`echo $a | sed 's!^myfile!mydir/newname!'`
cp $a $b
done
或者让 perl 脚本生成一个命令列表,然后将这些命令输入到 shell 中。
我真的很喜欢 perl 脚本的正则表达式语法rename(由 Robin Barker 和 Larry Wall 编写),例如:
rename "s/OldFile/NewFile/" OldFile*
OldFile.c和OldFile.h分别重命名为NewFile.c和NewFile.h
我只是想要一个复制命令完全相同的东西:
copy "s/OldFile/NewFile/" OldFile*
因此,我复制了该脚本并将重命名语句更改为通过File::Copy. 瞧!使用 perl-regex 语法的复制命令:
https://gist.github.com/jcward/0ead33bd79f2061c68728cc82582241f