1

我正在尝试将源目录中的一些文件复制到目标目录。源目录包含以下文件。

源目录路径是 ~/certificate/

drwxrwxr-x 2 ubuntu ubuntu     4096 Oct 16 11:58 apache
-rw-rw-r-- 1 ubuntu ubuntu     5812 Oct 16 11:20 apache.keystore
-rw-rw-r-- 1 ubuntu ubuntu     1079 Oct 16 08:31 csr.txt
-rwxr-xr-x 1 ubuntu ubuntu 36626564 Oct 16 10:08 my.war
drwxrwxr-x 2 ubuntu ubuntu     4096 Oct 16 09:39 tomcat
-rw-rw-r-- 1 ubuntu ubuntu     6164 Oct 16 09:31 tomcat.keystore

我想将所有文件复制到 ~/certs/ 除了 my.war (certs 是目标目录)。我尝试了以下命令但没有成功。我不想将 my.war 移出文件夹,即使是暂时的。

cp -r ~/certificate/(?!m)* ~/cert/. 

请帮助我使用合适的正则表达式或任何其他工具。

4

4 回答 4

2

假设您正在使用bash,您可以启用该extglob选项并使用:

cp -r ~/certificate/!(my.war) ~/certs/

采用

shopt -s extglob

启用该选项。

这是相关文档的链接。

于 2013-10-17T05:15:41.310 回答
1

好吧,因为它是唯一以“m”开头的文件,你可以这样做 cp -r ~/certificate/[a-ln-z]* ~/cert

于 2013-10-17T05:15:28.533 回答
0

您可以尝试使用“查找”命令。它查找目录中的所有文件,除了“my.war”文件,并对所有找到的文件执行“cp”命令。

find . -type f \( -iname "*" ! -iname "my.war" \) -exec cp {} ./cert/ \;
于 2013-10-17T05:44:01.247 回答
0

为了完整性:zsh解决方案。在带有选项集的 zsh 中,EXTENDED_GLOB您可以执行以下操作(请参阅文档):

cp -r ~/certificate/^my.war ~/certs

或使用KSH_GLOB(and NO_BARE_GLOB_QUAL) 选项集,您可以使用与 bash 中相同的 ksh 语法:

cp -r ~/certificate/!(my.war) ~/certs
于 2013-10-19T15:59:34.953 回答