将正则表达式与 cp 一起使用

将正则表达式与 cp 一起使用

这是一个简单的问题。我正在尝试将当前目录中以 开头axis-2和结尾的所有文件复制.jar到目标目录~/MyDirectory.

我的第一次尝试是

cp '^axis2.*jar$' ~/MyDirectory

...但是当我尝试这样做时,cp输出“没有这样的文件或目录”错误消息。我不确定是否可以将正则表达式与cp.我也有一段时间没有使用正则表达式了,我的语法可能有问题。

有人对如何解决这个问题有任何建议吗?

答案1

Linux/UNIX 系统上的 shell 使用全局模式,不是正则表达式。因此,如果您想匹配以 开头axis2和结尾的文件名.jar,您可以使用:

cp axis2*.jar /destination/directory

答案2

如果您有 GNUfind和 GNUcp可用,则可以使用正则表达式,如以下命令所示:

find . -maxdepth 1 -regextype posix-basic -regex '.*/axis2[^/]*jar$' \
       -exec cp -t ~/MyDirectory {} +

如果 glob 模式和 bash 扩展 glob 模式都不满足您的需求,这会很方便。

答案3

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

rename "s/OldFile/NewFile/" OldFile*

OldFile.c和分别OldFile.h重命名为NewFile.cNewFile.h

我只是想用复制命令得到完全相同的东西:

copy "s/OldFile/NewFile/" OldFile*

因此,我复制了该脚本并将重命名语句更改为通过 复制File::Copy。等等瞧!使用 perl-regex 语法的复制命令:杰西沃德/副本

答案4

有一个命令fd(有时名为fdfind)是find.

我们fd可以:

fd regexp             ... to get files matching regexp
... -x command        ... to execute `command` on the files

所以我建议如下:

fd '^axis2.*jar$'  -x cp -t ~/MyDirectory

相关内容