Crie um arquivo com arquivos e pastas ocultos e crie um arquivo. entrada de raiz

1

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

tar -czf $ARCHIVE_NAME -C $DIR .

criará um arquivo como

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

onde gostaria que a raiz do arquivo fosse os arquivos e pastas reais, não tendo 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 comando tar acima.

Observe a barra "Localização"; o arquivo à direita deve ser / e não /./ .

    
por Yanick Rochon 17.07.2014 / 14:23

3 respostas

3

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

Ter ./ na frente do arquivo ao listar o arquivo ajuda a manipular arquivos com um nome especial. Um nome de arquivo -file será exibido como ./-file permitindo que seja processado por uma segunda ferramenta.

    
por 17.07.2014 / 14:30
1

Alterando seu comando de

tar -czf $ARCHIVE_NAME -C $DIR .

para

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

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

    
por 17.07.2014 / 23:39
0

Este comando irá colocar os arquivos tar no diretório atual sem o primeiro ./ :

tar cf /some/tarfile.tar *

Claro, não incluirá nomes de arquivos que começam com um período, o que provavelmente não é o que você deseja. Você pode adicionar curingas adicionais para captá-los:

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

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

O GNU tar - que é o que a maioria das distribuições Linux usa - tem um recurso para transformar nomes de arquivos usando expressões sed . Isso removerá o ./ dos arquivos durante a criação do arquivo:

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

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

Algumas versões do tar podem 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

Este 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 o arquivo de nomes de arquivos ler /dev/stdin (sua entrada padrão).

    
por 17.07.2014 / 17:36

Tags