Criar arquivo com arquivos e pastas ocultos cria um arquivo . entrada raiz

Criar arquivo com arquivos e pastas ocultos cria um arquivo . entrada raiz

Estou tentando arquivar uma pasta de projeto com arquivos e pastas ocultos e recebo uma com uma entrada raiz .. É irritante. Normalmente:

tar -czf $ARCHIVE_NAME -C $DIR .

criará um arquivo como

./package.json
./.git
./.gitignore
.
.
.

onde eu gostaria que a raiz do arquivo fosse os arquivos e pastas reais, sem uma .entrada. Como

package.json
.git
.gitignore
.
.
.

Como faço isso?

*Editar*

A imagem abaixo pode ser útil para esclarecer esta questão.

  • À esquerda, um arquivo criado com a ferramenta GUI do projeto (de dois dias atrás).
  • À direita, um arquivo criado com o tarcomando acima.

Observe a barra “Localização”; o arquivo à direita deve ser /, enão /./.

insira a descrição da imagem aqui

Responder1

./significa o diretório atual. Suas duas listagens são idênticas.

Ter ./na frente do arquivo ao listar o arquivo ajuda a lidar com arquivos com um nome especial. Um nome de arquivo -fileserá exibido ./-filepermitindo que seja processado por uma segunda ferramenta.

Responder2

Alterando seu comando de

tar -czf $ARCHIVE_NAME -C $DIR .

para

tar -czf $ARCHIVE_NAME -C $DIR ./*

deve fazer o truque. Dessa forma, você não está dizendo "Adicionar o diretório .ao arquivo", mas sim "Adicionar todos esses arquivos do diretório .ao arquivo".

Responder3

Este comando irá tar os arquivos no diretório atual sem o início ./:

tar cf /some/tarfile.tar *

É claro que não incluirá nomes de arquivos começando com ponto final, o que provavelmente não é o que você deseja. Você pode adicionar curingas adicionais para capturá-los:

tar cf /some/tarfile.tar * .[a-zA-Z]*

Mas esta não é uma solução de uso geral; você precisa saber quais nomes de arquivos estão no diretório para poder criar curingas apropriados.

GNU tar – que é o que a maioria das distribuições Linux usa – tem um recurso para transformar nomes de arquivos usando sedexpressões. Isso removerá os ./arquivos ao criar o arquivo:

tar cf /some/tarfile.tar --transform 's,^\./,,' .

O arquivo resultante ainda terá uma entrada para "." próprio diretório.

Algumas versões do tarpodem ler os nomes dos arquivos a serem tarados de um arquivo. Você pode explorar esse recurso para fazer isso:

ls -a | egrep -v '^\.\.?$' | tar cf - -T /dev/stdin

Esse pipeline constrói uma lista de todos os arquivos no diretório atual, remove as entradas .e ..e canaliza o restante dos nomes para tar. tar faz com que o arquivo a partir dos nomes dos arquivos seja lido /dev/stdin(sua entrada padrão).

informação relacionada