如何在linux中复制特定文件?

时间:2013-10-17 05:11:04

标签: regex linux

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

源目录路径是〜/ 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 个答案:

答案 0 :(得分:2)

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

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

使用

shopt -s extglob

启用该选项。

以下是relevant documentation.

的链接

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

find . -type f \( -iname "*" ! -iname "my.war" \) -exec cp {} ./cert/ \;

答案 3 :(得分:0)

完整性:zsh解决方案。在zsh中设置了EXTENDED_GLOB选项,您可以执行此操作(请参阅documentation):

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

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

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