Você pode usar este comando para fazer backup de todos os seus arquivos de ponto ( .<something> ) no diretório $HOME :
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
regex usando apenas tar?
método # 1
Eu pesquisei bastante isso e cheguei vazio. O fator limitante seria que quando o tar está executando, é excluído, a barra final ( / ) que aparece com os diretórios não faz parte da equação quando o tar está executando sua correspondência de padrões.
Veja um exemplo:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
Esta variante inclui uma exclusão de .*/ e você pode ver com a chave verbose ativada para tar, -v , que esses diretórios estão passando por essa exclusão.
método # 2
Pensei que talvez as opções --no-wildcards-match-slash ou --wildcards-match-slash relaxassem a ganância do .*/ , mas isso também não teve efeito.
Tirando a barra da exclusão, .* não era uma opção, já que isso diria a tar para excluir todos os dotfiles e dotdirectories:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
método # 3 (Feio!)
Portanto, a única alternativa que posso conceber é fornecer uma lista de arquivos para tar . Algo parecido com isto:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
Esta abordagem tem problemas se o número de arquivos exceder a quantidade máxima de espaço para transmitir argumentos para um comando seria um problema evidente. A outra é que é feia e excessivamente complexa.
então o que aprendemos?
Parece não haver uma maneira simples e elegante de realizar isso usando tar & expressões regulares. De modo a comentar @Terdon, find ... | tar ... é realmente a maneira mais apropriada de fazer isso.
:)