使用find来排除一个目录,并将目录中的所有内容都打上tar

我有一个目录下面:

DIR1
DIR2
文件1
文件2

我想tar tar除了dir1以外的所有东西

当我做:

find . -path '*dir1*' -prune -o -print 

我没有在输出中看到dir1(如预期的那样)

但是当我这样做:

 find . -path '*dir1*' -prune -o -exec tar -czvf documents.tgz '{}' \+ 

我发现dir1也在documents.tgz中被tarred了。 为什么?

这是因为. 在输出中。 . 也得到tar

使用这个intead,它将排除两个; .dir1

 find . -not -path '*dir1*' -not -path "." -exec tar -czvf documents.tgz '{}' \+ 

请参阅documents.tgz的内容:

 $ tar tf documents.tgz ./file2 ./file1 ./dir2/ 

tar也有一个“排除”选项,你可以添加一次或多次。

例如:

 tar czvf documents.tgz --exlude dir1 --exclude dir2 * 

注意:我宁愿在不同的目录中创buildtar,以避免在tar中包含documents.tgz本身,以免在此期间再次运行命令而不删除它。