Qual é a diferença entre. e o diretório atual?

2

Estou tentando copiar o diretório atual como uma fonte. Usar caminhos completos me dá o comportamento esperado, copiando todo o diretório para o destino.

$ cd /tmp
$ mkdir a b
$ cd a
$ touch 1 2 3
$ cp -r /tmp/a /tmp/b # use /tmp/a as source
$ ls /tmp/b
a

No entanto, usar . para se referir à fonte copia o conteúdo da fonte em vez do próprio diretório.

$ cd /tmp
$ mkdir c
$ cd a
$ cp -r . /tmp/c # use . as source
$ ls /tmp/c
1 2 3

Qual é a diferença entre . e o caminho absoluto do diretório atual? Se eu quiser copiar o diretório atual, há uma breve referência? (A única maneira que eu pude ver foi usar ../a , o que parece um pouco redundante.)

    
por Sparhawk 15.01.2016 / 23:40

2 respostas

3

No primeiro caso, você está pedindo que cp copie /tmp/a e seu conteúdo para /tmp/b ; então primeiro a é copiado, para /tmp/b/a , então o conteúdo de a é copiado para /tmp/b/a .

No segundo caso, você está pedindo que cp copie . e seu conteúdo para /tmp/b ; usando o mesmo processo de pensamento acima, podemos pensar nisso como copiando . primeiro para /tmp/b/. ( ie /tmp/b ), então copiando o conteúdo de . para /tmp/b/. .

Não existe uma referência curta para o diretório atual, que pode funcionar em todos os casos, já que o diretório atual pode ter nomes diferentes (usando links simbólicos). Eu acho que o mais próximo que você pode chegar é $PWD .

    
por 15.01.2016 / 23:49
2

Usar . tem certas vantagens. Por exemplo. você pode copiar um diretório sem ter que se preocupar se ele já existe como target (o diretório pai tem que existir, no entanto):

Dependendo se /tmp/target é um diretório existente, o comando

cp -a /path/to/source/dir /tmp/target

leva a resultados diferentes. Mas

cp -a /path/to/source/dir/. /tmp/target

tem o mesmo resultado em ambos os casos.

    
por 16.01.2016 / 00:43

Tags