Existem várias maneiras de conseguir isso, muitas das quais já foram sugeridas nesta questão, algumas das quais não foram. Esta é minha tentativa de compilá-los todos (com referências) e mostrar exemplos para facilitar a leitura, permitindo que o leitor escolha um para atender às suas necessidades.
Exemplo de árvore de entrada
Esta é a estrutura que será apresentada nos exemplos a seguir.
.dotfile
dir/
.hidden
file.txt
root.txt
Solução POSIX (Cross-Platform, Cross-Shell)
Você pode usar pax em vez de tar, como Phil P. apontou .
Comportamento habitual:
$ pax -wzvf ../ball.tar.gz .
[…]
$ pax -zf ../ball.tar.gz
.
./.dotfile
./dir
./dir/.hidden
./dir/file.txt
./root.txt
Sem barra:
$ pax -wzvf ../ball.tar.gz -s ':^\./::' .
[…]
$ pax -zf ../ball.tar.gz
.
.dotfile
dir
dir/.hidden
dir/file.txt
root.txt
Solução de globulação de conchas (multiplataforma)
Você também pode usar *
em vez de .
, como - apontou . Essa solução é basicamente uma forma abreviada da resposta do chutz, já que o shell irá expandir o asterisco no exemplo abaixo para todos os arquivos não ocultos antes de passá-los como argumentos para o programa tar
.
Não há barra (mas observe a falta de nível de raiz .dotfile
):
$ tar -czvf ../ball.tar.gz *
[…]
$ tar -tzf ../ball.tar.gz
dir/
dir/.hidden
dir/file.txt
root.txt
Se você não se importa com o empacotamento de arquivos de ponto na CWD, está feito.
Se você fizer cuidado, não estará sem recursos. Em muitos shells (por exemplo, bash
), é possível incluir arquivos de ponto no shell glob alterando uma opção de shell. Com o bash, isso é feito com shopt :
dotglob
If set, bash includes filenames beginning with a '.' in the results of pathname expansion.
$ shopt -s dotglob # Include dot-files in pathname expansions
$ tar -czvf ../ball.tar.gz *
[…]
$ shopt -u dotglob # Restore shell's default globbing behavior
$ tar -tzf ../ball.tar.gz
.dotfile
dir/
dir/.hidden
dir/file.txt
root.txt
Solução GNU (Linux)
Use --xform como mencionado em answer .
Comportamento habitual:
$ tar -czvf ../ball.tar.gz .
[…]
$ tar -tzf ../ball.tar.gz
./
./root.txt
./.dotfile
./dir/
./dir/file.txt
./dir/.hidden
Sem barra:
$ tar -czvf ../ball.tar.gz --xform 's:^\./::' . [--show-transformed-names|--show-stored-names]
[…]
$ tar -tzf ../ball.tar.gz
./
root.txt
.dotfile
dir/
dir/file.txt
dir/.hidden
Solução BSD (Mac OS X)
Use -s , que é enganosamente similar a pax / sed , mas não completamente, como mostrado abaixo.
Comportamento habitual:
$ tar -czvf ../ball.tar.gz .
[…]
$ tar -tzf ../ball.tar.gz
./
./.dotfile
./dir/
./root.txt
./dir/.hidden
./dir/file.txt
Sem barra:
$ tar -czvf ../ball.tar.gz -s '/.//' .
tar: Removing leading '/' from member names
[…]
$ tar -tzf ../ball.tar.gz
.dotfile
dir/
root.txt
dir/.hidden
dir/file.txt