Entrando em um diretório vinculado por um link

12

Quando eu faço cdum link, meu caminho atual é prefixado com o caminho do link, em vez do caminho do diretório ao qual o link está vinculado. Por exemplo

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Gostaria que meu caminho atual fosse alterado para o caminho do diretório vinculado, para que eu também possa trabalhar com os diretórios pai do diretório vinculado. Além lsdo link para descobrir o diretório vinculado e, cdem seguida, para ele, quais são algumas maneiras mais simples de fazer isso? Por exemplo, depois de cdum link, como você altera seu caminho atual para o caminho do diretório vinculado?

Tim
fonte

Respostas:

22

Com o shell POSIX, você pode usar a -Popção cd builtin:

cd -P <link>

Com bash, de man bash:

A opção -P diz para usar a estrutura do diretório físico em vez de seguir os links simbólicos (consulte também a opção -P para o comando set builtin)

cuonglm
fonte
7
Você pode fazer isso cd -P .após o original cd.
ctrl-alt-delor
5

Você pode usar readlinkpara determinar onde o seu link aponta e fornecer essa saída como o destino do seu cd.

cd "$(readlink <link>)"

No caso de links simbólicos adicionais apontando para links simbólicos, readlinksimplesmente fornecerá o destino, a menos que você especifique uma de suas opções para seguir links simbólicos para um destino de arquivo canônico, por exemplo readlink -f <link>.

readlink - imprime o valor de um link simbólico ou nome de arquivo canônico

-f, --canonicalize
canonicalize seguindo cada link simbólico em cada componente do nome fornecido recursivamente; tudo, exceto o último componente, deve existir

-e, --canonicalize-
canonicalize existente seguindo cada link simbólico em cada componente do nome fornecido recursivamente, todos os componentes devem existir

-m, --canonicalize-faltando
canonicalize seguindo cada link simbólico em cada componente do nome fornecido recursivamente, sem requisitos sobre a existência de componentes

Jon Surrell
fonte
5

Os shell do tipo Korn acompanham os links simbólicos no caminho para o diretório atual (conhecido como rastreamento lógico do diretório atual). Se você deseja expandir todos os links simbólicos, passe a opção -Ppara o cdbuiltin (para rastreamento físico de diretório atual):

cd -P logic

Se você estiver em um diretório ao qual acessou por meio de um link simbólico e quiser mudar o diretório atual rastreado para o caminho com os links simbólicos expandidos, execute

cd -P .

Se você deseja imprimir o caminho para o diretório atual com links simbólicos expandidos, execute pwd -P. No bash, se você deseja desativar o rastreamento lógico, execute set -P; no zsh, execute set -wou setopt chase_links.

Gilles 'SO- parar de ser mau'
fonte