Linux cp 与正则表达式

发布于 2024-12-01 00:34:20 字数 240 浏览 3 评论 0原文

我想复制目录中的一些文件,重命名文件但保留扩展名。使用正则表达式通过简单的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奈何桥上唱咆哮 2024-12-08 00:34:20

假设您有 myfile.amyfile.bmyfile.c

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

这将创建(在删除 echo 后) ) newname.anewname.bnewname.c

Suppose you have myfile.a, myfile.b, myfile.c:

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

This creates (upon removal of echo) newname.a, newname.b, newname.c.

傾城如夢未必闌珊 2024-12-08 00:34:20

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

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

或者让 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

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

Or have a perl script generate a list of commands that you then source into the shell.

情未る 2024-12-08 00:34:20

我真的很喜欢 rename perl 脚本的正则表达式语法(由 Robin Barker 和 Larry Wall 编写),例如:

重命名“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

I really like the regex syntax of the rename perl script (by Robin Barker and Larry Wall), e.g.:

rename "s/OldFile/NewFile/" OldFile*

OldFile.c and OldFile.h are renamed to NewFile.c and NewFile.h, respectively

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文