%20.png)
Suponha que eu tenha um sistema de arquivos como este:
/home/me/dir1/dir2/dir3/dir4/dir5/dir6/file1
Então em /home/me/dir1
, eu crio um link simbólico:
$ cd /home/me/dir1
$ ln -s /home/me/dir1/dir2/dir3/dir4/dir5/dir6 linkdir6
Estou tentando copiar o arquivo1 para meu diretório inicial (este é meu exemplo simplificado, é mais complicado que isso - "/home/me/" é na verdade uma estrutura de diretório muito mais complicada, então "~/" não é uma solução).
$ cd linkdir6
$ cp file1 ../
$ cd ..
$ ls
dir2 linkdir6
Não vejo o arquivo1. Procurando por isso, eu encontro em/home/me/dir1/dir2/dir3/dir4/dir5/file1
Parecia que cp
não percebi que estava dentro de um diretório simbólico.
Como é que eucp
fora deuma pasta simbólica?
Ou como faço cp
para entender que ../
deve ser desreferenciado (ondedestinona página de manual é adiado)?
Estou esquecendo de algo? Isso é possível?
Obrigado!
(nota final - o caso de uso real está em uma estrutura de diretório profunda, dentro de um diretório de link simbólico, tentando copiar um arquivo ../another-symlink-directory/ sem digitar caminhos completos - esse é um dos pontos dos links simbólicos, tanto quanto Estou preocupado)
Responder1
Na verdade, você seguiu o link com o arquivo cd linkdir6
. Você está realmente nesse diretório, então ../ está um nível acima daí, no dir5.
A maneira mais segura com cp é estar no diretório de destino. Em seguida, use o link para acessar o arquivo de origem.
cd ~/me/dir1 #.. Target
cp linkdir6/file1 .
Pessoalmente, prefiro a opção -t (target) no cp.
cp -t ~/me/dir1 dir1/linkdir6/file1
Responder2
$ cp file1 "$(cd .. && pwd -P)"
Veresta resposta.