Você pode tentar excluir o diretório em encontrar assim:
find /home/karl/dev/beer -path .git -prune -printf "%P\n" | tar -czf beer.tar.gz --no-recursion -T -
Você também pode verificar esta discussão.
find /home/karl/dev/beer/ -printf "%P\n" | tar --exclude='./.git' -czf beer.tgz --no-recursion -C /home/karl/dev/beer/ -T -
O comando ainda inclui o diretório .git.
Você pode tentar excluir o diretório em encontrar assim:
find /home/karl/dev/beer -path .git -prune -printf "%P\n" | tar -czf beer.tar.gz --no-recursion -T -
Você também pode verificar esta discussão.
de man find :
-printf
....
%P File's name with the name of the starting-point under which it was found
removed.
Então você está excluindo um diretório que não existe na sua saída. Se você olhar para a saída do seu comando find antes de canalizá-lo (geralmente uma boa ideia), verá que ele não possui nenhum ./ . Portanto, você deve usar --exclude='.git' não ./.git
Mas, em vez de usar find para isso, convém usar globstar para tornar a recursão de globbing:
shopt -s globstar
tar --exclude='.git' -czvf beer.tar.gz /home/karl/dev/beer/**