使用 tar 排除目录

使用 tar 排除目录
find /home/karl/dev/beer/ -printf "%P\n" | tar --exclude='./.git' -czf beer.tgz --no-recursion -C /home/karl/dev/beer/ -T -

该命令仍然包含.git 目录。

答案1

您可以尝试像这样在 find 中排除目录:

find /home/karl/dev/beer -path .git -prune -printf "%P\n" | tar -czf beer.tar.gz --no-recursion  -T -

您还可以检查讨论。

答案2

man find

 -printf
 ....
 %P     File's name with the name of the starting-point under which it was found 
        removed.

因此,您正在排除输出中不存在的目录。如果您在管道化命令之前查看find命令的输出(通常是一个好主意),您将看到它没有前导./。因此,您应该使用--exclude='.git'not./.git

但是,您可能不想使用它,而是find希望使用它globstar来使遍历递归:

shopt -s globstar
tar --exclude='.git' -czvf beer.tar.gz /home/karl/dev/beer/**

相关内容