Comportamento estranho de mv / cp para o diretório “.” no Linux

3

Eu notei um comportamento estranho de mv / cp no Linux. Os diretórios A e A /. deve ser equivalente, mas como argumentos para a fonte eles parecem se comportar de maneira diferente. Isso é um bug? Claro que você poderia perguntar por que eu deveria usar A /. em vez de A como fonte, mas às vezes se quer "." como fonte e as mesmas coisas estranhas acontecem ... Talvez alguém saiba uma resposta.

Vamos começar com

$ mkdir A A/A1 B

e agora

variante 1)

$ cp -r A B
$ ls B
A

Tudo bem.

variante 2)

$ cp -r A/. B
$ ls B
A1

Por que "A1" e não "A"?

variante 3)

$ mv A B
$ ls B
A

Tudo bem.

variante 4)

$ mv -i A/. B
mv: overwrite 'B/.'? y
mv: cannot move 'A/.' to 'B/.': Device or resource busy

estranho ...

    
por Alex1357 06.12.2011 / 11:38

1 resposta

2

"A" e "A /." são ambas entradas de diretório que apontam para a mesma coisa, mas são elas mesmas coisas diferentes. "A" é uma entrada no diretório atual e "A /". é uma entrada chamada "." no diretório A. Pense nisso como operar em uma caixa do lado de fora, versus operar na caixa por dentro.

Especificamente,

cp -r A B

Copia A para B.

cp -r A/. B

Vai para o diretório A e copia o conteúdo do diretório atual (ou seja, ./A1) para B.

mv A B

Move a entrada de diretório chamada "A" do diretório atual para B.

mv -i A/. B

Tenta mover a entrada de diretório "." de A para B. No entanto, já existe uma entrada chamada "." em B. Em geral, você não pode se mover "." (isso é como tentar mover a caixa por dentro).

    
por 06.12.2011 / 13:05