我有一个目录下面:
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本身,以免在此期间再次运行命令而不删除它。