创建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
支持,甚至可以在find
和xargs
使用类似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