创建tarball时排除公共子目录

时间:2014-10-02 12:54:38

标签: tar

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

我找到了Excluding directory when creating a .tar.gz file,但不包括那个似乎需要在commndline上传递每个.CC目录。这在我的案例中是不切实际的。

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

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

2 个答案:

答案 0 :(得分:1)

您可以输入--exclude 'root/a/.CC' --exclude 'root/b/.CC' ...

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

您可以使用find支持的任何模式,甚至可以在findxargs之间使用grep之类的内容。

答案 1 :(得分:0)

以下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可以换成任何其他常见的扩展名,这应该仍然有用。