使用 find 排除目录并将目录中的所有其他内容打包起来

使用 find 排除目录并将目录中的所有其他内容打包起来

我在目录中有以下内容:

目录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

这是因为.输出中的。.也得到了tared。

改用这个,它将排除两者;.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 中。

相关内容