O que acontece se mover acidentalmente um link virtual seguido de "/"?

2

Eu criei um link para o diretório atual,

$ ln -s "$PWD" math

Eu então queria movê-lo para outro diretório.

$ mv math/ ~/dirlinks/maths/

Eu então percebi que deveria

$ mv math ~/dirlinks/maths/

Então, pressione Ctrl-c para cancelar o processo antes que ele termine.

Descobri que há um diretório mathabaixo ~/dirlinks/maths/e parece que os arquivos abaixo .são copiados para ~/dirlinks/maths/math, porque eu vi os arquivos abaixo ~/dirlinks/maths/mathtambém aparecerem abaixo .. Mas eu não entendo porque é mvnão cp. O que aconteceu quando eu corro mv math/ ~/dirlinks/maths/?

Obrigado.

Tim
fonte
Se eu tentar obter: mv: não é possível mover 'math /' para '../x/y/math': Não é um diretório . Tem certeza de que ~/dirlinks/maths/mathnão é um link simbólico? Isso explicaria por que os arquivos aparecem nos dois caminhos.
Art #
~/dirlinks/maths/mathé um dir, não um link simbólico, criado quando eu corri mv.
Tim
então o seu mvdeve ser diferente da minha :)
artm
Você pode postar a saída de cd -P ~/dirlinks/maths/math; pwd?
mikeserv
1
Sim, isso parece com o porquê. um sistema de arquivos cruzados mvequivale a cp source-dir/* target-dir; rm -rf source-dir. Provavelmente não exatamente - não sei a ordem que seguiria - mas está muito perto. Então, espero que você tenha interrompido apenas o bit da cópia? Verifique atentamente se há arquivos ausentes no /windows-d.
mikeserv

Respostas:

1

Vamos dar uma olhada no que seu primeiro comando fez: ele criou um link simbólico mathno diretório atual que aponta para o caminho absoluto do diretório atual. Vamos inspecionar um pouco mais perto:

user@host:/free$ ls -al /free
total 4
drwxrwxrwt  2 root root   40 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct  1 22:28 ..
user@host:/free$ ln -vs /free math
‘math’ -> ‘/free’
user@host:/free$ ls -al /free
total 4
drwxrwxrwt  2 root root    60 Oct 14 10:29 .
drwxr-xr-x 24 root root  4096 Oct  1 22:28 ..
lrwxrwxrwx  1 user users    5 Oct 14 10:29 math -> /free

Agora, se você adicionar alguns arquivos $PWDe executar a movimentação:

user@host:/free$ touch a b
user@host:/free$ mv -vi math/ /tmp/Q
‘math/’ -> ‘/tmp/Q’
‘math/math’ -> ‘/tmp/Q/math’
‘math/b’ -> ‘/tmp/Q/b’
‘math/a’ -> ‘/tmp/Q/a’
removed ‘math/math’
removed ‘math/b’
removed ‘math/a’
mv: cannot remove ‘math/’: No such file or directory

Basicamente, move todo o diretório apontado por mathpara o destino. Como ele aponta para o diretório atual, ele é completamente movido para onde você o disse. Se você estivesse em algum lugar diretamente acima do destino, poderia ter resultado em um problema de loop interessante.

peterph
fonte