find /home/karl/dev/beer/ -printf "%P\n" | tar --exclude='./.git' -czf beer.tgz --no-recursion -C /home/karl/dev/beer/ -T -
Команда по-прежнему включает каталог .git.
Вы можете попытаться исключить каталог из поиска следующим образом:
find /home/karl/dev/beer -path .git -prune -printf "%P\n" | tar -czf beer.tar.gz --no-recursion -T -
Вы также можете проверить это обсуждение.
от man find
:
-printf
....
%P File's name with the name of the starting-point under which it was found
removed.
, Таким образом, Вы исключаете каталог, который не существует в Вашем выводе. При рассмотрении вывода Вашего find
команда перед передачей по каналу его (обычно хорошая идея), Вы будете видеть, что это не имеет никакого продвижения ./
. Так, необходимо использовать --exclude='.git'
не ./.git
, А скорее, чем использование find
для этого, Вы могли бы хотеть использовать globstar
для создания globbing рекурсивный:
shopt -s globstar
tar --exclude='.git' -czvf beer.tar.gz /home/karl/dev/beer/**