这是一个简单的问题。我正在尝试将当前目录中以 开头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.c
和NewFile.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