【问题标题】:Exclude common subdirectories when creating a tarball创建 tarball 时排除公共子目录
【发布时间】:2014-11-27 11:16:57
【问题描述】:

我正在创建一个在 ClearCase 中管理的大型代码库的 tarball。每个目录都有一个名为“.CC”的子目录。我想从我的 tarball 中排除这些。

我找到了Excluding directory when creating a .tar.gz file,但排除它似乎需要在命令行上传递每个 .CC 目录。这对我来说是不切实际的。

有没有办法排除符合特定模式的目录?

编辑: 我不是在问如何排除特定的有限目录列表。我在问如何排除以特定模式结尾的所有目录。

【问题讨论】:

标签: tar


【解决方案1】:

您可以输入$(find root -type d -name .CC -exec echo "--exclude \'{}\'" \;|xargs),而不是手动输入--exclude 'root/a/.CC' --exclude 'root/b/.CC' ...

您可以使用find 支持的任何模式,甚至可以在findxargs 之间使用诸如grep 之类的东西。

【讨论】:

    【解决方案2】:

    以下 bash 脚本应该可以解决问题。它使用@Marcus Sundman 给出的答案。

    #!/bin/bash
    
    echo -n "Please enter the name of the tar file you wish to create with out extension "
    read nam
    
    echo -n "Please enter the path to the directories to tar "
    read pathin
    
    echo tar -czvf $nam.tar.gz
    excludes=`find $pathin -iname "*.CC" -exec echo "--exclude \'{}\'" \;|xargs`
    echo $pathin
    
    echo tar -czvf $nam.tar.gz $excludes $pathin
    

    这将打印出您需要的命令,您可以将其复制并粘贴回去。可能有一种更优雅的方式可以将其直接提供给命令行。

    *.CC 可以交换为任何其他常见的扩展名,这应该仍然有效。

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多