Linux cp 与正则表达式
我想复制目录中的一些文件,重命名文件但保留扩展名。使用正则表达式通过简单的 cp 可以实现这一点吗?
例如:
cp ^myfile\.(.*) mydir/newname.$1
所以我可以复制保留扩展名的文件,但重命名它。有没有办法获取 cp 正则表达式中的匹配元素以在命令中使用它? 如果没有,我想我会做一个 perl 脚本,或者如果你有其他方法......
谢谢
I would like to copy some files in a directory, renaming the files but conserving extension. Is this possible with a simple cp
, using regex ?
For example :
cp ^myfile\.(.*) mydir/newname.$1
So I could copy the file conserving the extension but renaming it. Is there a way to get matched elements in the cp
regex to use it in the command ?
If not, I'll do a perl script I think, or if you have another way...
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
假设您有
myfile.a
、myfile.b
、myfile.c
:这将创建(在删除
echo
后) )newname.a
、newname.b
、newname.c
。Suppose you have
myfile.a
,myfile.b
,myfile.c
:This creates (upon removal of
echo
)newname.a
,newname.b
,newname.c
.shell 不理解一般的正则表达式;为此,您必须外包给辅助程序。解决任务的经典脚本方法类似于
或者让 perl 脚本生成一个命令列表,然后将其源到 shell 中。
The shell doesn't understand general regexes; you'll have to outsource to auxiliary programs for that. The classical scripty way to solve your task would be something like
Or have a perl script generate a list of commands that you then source into the shell.
我真的很喜欢
rename
perl 脚本的正则表达式语法(由 Robin Barker 和 Larry Wall 编写),例如:我只是想要使用复制命令完全相同的东西:
copy "s/OldFile/NewFile/" OldFile*
所以我复制了该脚本并将重命名语句更改为通过
File::Copy
复制。等等瞧!使用 perl-regex 语法的复制命令:https://gist.github.com/jcward/0ead33bd79f2061c68728cc82582241f
I really like the regex syntax of the
rename
perl script (by Robin Barker and Larry Wall), e.g.:I simply wanted the exact same thing with a copy command:
copy "s/OldFile/NewFile/" OldFile*
So I duplicated that script and changed the rename statement to copy via
File::Copy
. Et voila! A copy command with perl-regex syntax:https://gist.github.com/jcward/0ead33bd79f2061c68728cc82582241f