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/**