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