创建tarball时排除公共子目录

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

我在创建.tar.gz文件时发现排除了目录,但排除该目录似乎需要在commndline上传递每个.CC目录。 在我的情况下这是不切实际的。

有没有办法排除满足特定模式的目录?

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


除了手动输入--exclude 'root/a/.CC' --exclude 'root/b/.CC' ...你可以输入$(find root -type d -name .CC -exec echo "--exclude '{}'" ;|xargs)

你可以使用任何模式find支持,甚至可以在findxargs使用类似grep的东西。


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

链接地址: http://www.djcxy.com/p/47081.html

上一篇: Exclude common subdirectories when creating a tarball

下一篇: Correct mime type for .mp4