我想复制目录中的一些文件,重命名文件但保留扩展名。这可以通过简单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