我在目录中有以下内容:
目录1
目录2
文件
1 文件2
我想要打包除 dir1 之外的所有内容
当我做:
find . -path '*dir1*' -prune -o -print
我没有在输出中看到 dir1(如预期)
但当我这样做时:
find . -path '*dir1*' -prune -o -exec tar -czvf documents.tgz '{}' \+
我发现 dir1 也在 documents.tgz 中被压缩了。为什么?
答案1
这是因为.
输出中的。.
也得到了tar
ed。
改用这个,它将排除两者;.
和dir1
:
find . -not -path '*dir1*' -not -path "." -exec tar -czvf documents.tgz '{}' \+
查看内容documents.tgz
:
$ tar tf documents.tgz
./file2
./file1
./dir2/
答案2
tar 还有一个“排除”选项,您可以添加一次或多次。
例如:
tar czvf documents.tgz --exlude dir1 --exclude dir2 *
注意:我宁愿在不同的目录中创建 tar,以避免在您下次运行该命令而不删除它的情况下将 documents.tgz 本身包含在 tar 中。