Estou assumindo que você está usando o FreeBSD tar¹, já que esta é a única implementação que conheço com a opção --include
.
Quando você passa --include
, somente os arquivos incluídos explicitamente são percorridos. Ao construir um arquivo, se um diretório não for atravessado, nem ele nem qualquer um dos seus conteúdos poderão ser incluídos. Como você está com o tar .
, mas não incluindo .
, o argumento da linha de comando exclusiva não é incluído e você obtém um arquivo vazio.
Para alcançar os diretórios .a
, você precisaria incluir todos os diretórios pai. A coisa é, se você fizer isso, então todo o seu conteúdo será incluído também. Você pode usar --exclude
para excluí-los, mas precisará de um padrão de exclusão que não exclua os diretórios de pontos que deseja incluir. Neste ponto --include
não tem mais uso. A opção --include
raramente é útil ao criar um arquivo, é mais útil quando copia parte de um arquivo existente (porque ao fazer isso, não há nenhuma travessia recursiva, apenas uma iteração através da lista de membros do arquivo de entrada). p>
tar --exclude='./*/[!.]*' -cvf a.tar .
Observe que todos os arquivos no diretório de nível superior estão incluídos. Eu não acho que haja uma maneira de incluir apenas os diretórios que terão conteúdos não vazios.
Para obter apenas os diretórios ./*/.*
e nada mais (em particular, não seus diretórios pai), você precisa passá-los como argumentos para tar, em vez de permitir que o tar recurse para encontrá-los.
tar -cvf a.tar ./*/.[!.]*/
Remova a barra final para incluir arquivos que não sejam diretórios (ou links simbólicos para diretórios). Adicione ./*/..?*/
para incluir diretórios cujo nome comece com ..
se você os tiver.
¹ Possivelmente sob um sistema operacional diferente.