【问题标题】:how to copy specific files in linux?如何在linux中复制特定文件?
【发布时间】:2013-10-19 23:59:34
【问题描述】:

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

源目录路径为~/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/. 

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

【问题讨论】:

  • 通用解决方案会很方便,但我的意思是,它只有 5 个文件。我希望这不会阻碍你。 cp a* c* t* ~/cert/呢?

标签: regex linux


【解决方案1】:

假设您使用的是bash,您可以启用extglob 选项并使用:

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

使用

shopt -s extglob

启用该选项。

这是relevant documentation.的链接

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 2019-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-25
          相关资源
          最近更新 更多