Criando um link simbólico para um diretório

3

Eu tenho um diretório para o qual eu quero criar um link simbólico. Os comandos que usei foram:

cd workspace_b4a
cd android-sdk-linux
ln -sv build-tools/20.0.0/lib/ platform-tools/lib

A saída foi:

‘platform-tools/lib’ -> ‘build-tools/20.0.0/lib/’

No entanto, o Nautilus diz que platform-tools/lib é um link quebrado e ls -l platform-tools/lib mostra os dois build-tools/20.0.0/lib/ e platform-tools/lib em vermelho. O que estou fazendo errado?

    
por John Rose 16.09.2014 / 10:06

4 respostas

4

Obrigado a todos por suas sugestões. Eu achei mais fácil entender como fazer isso (embora eu ainda não entenda a lógica por trás disso) com:

cd ~/workspace_b4a
cd android-sdk-linux
cd platform-tools
ln -sv ../build-tools/20.0.0/lib/ .
    
por John Rose 16.09.2014 / 14:59
3

Supondo que você esteja no diretório /path/to/common/root :

$ pwd
/path/to/common/root

que tem um subdiretório build-tools/20.0.0/lib :

$ readlink -e build-tools/20.0.0/lib
/path/to/common/root/build-tools/20.0.0/lib

e subdiretório platform-tools , mas nenhum arquivo ou diretório platform-tools/lib :

$ ls -d platform-tools
platform-tools
$ ls platform-tools/lib
ls: cannot access platform-tools/lib: No such file or directory

e você deseja tornar platform-tools/lib um link simbólico para build-tools/20.0.0/lib , então você pode torná-lo um link absoluto :

$ ln -s /path/to/common/root/build-tools/20.0.0/lib platform-tools/lib
$ ls -l platform-tools/lib
lrwxrwxrwx 1 user user 72 Sep 16 12:57 platform-tools/lib -> /path/to/common/root/build-tools/20.0.0/lib
$ readlink -e platform-tools/lib
/path/to/common/root/build-tools/20.0.0/lib

ou você pode torná-lo um link relativo :

$ ln -s ../build-tools/20.0.0/lib platform-tools/lib
$ ls -l platform-tools/lib
lrwxrwxrwx 1 user user 25 Sep 16 12:58 platform-tools/lib -> ../build-tools/20.0.0/lib
$ readlink -e platform-tools/lib
/path/to/common/root/build-tools/20.0.0/lib

notando que o link relativo deve ser relativo ao próprio arquivo de link simbólico , não ao local onde você executa o comando ln -s . Para ter certeza de que você não está errado (e porque você obtém uma conclusão conveniente da tabulação com ele), há duas opções:

Primeiro, vá ao diretório do symlink e crie o symlink lá:

$ cd platform-tools  
$ ln -s ../build-tools/20.0.0/lib lib  # The last lib is optional

Ou use a opção -r para tornar ln descobrir o caminho relativo enquanto você especifica os caminhos relativos ao seu diretório atual:

$ ln -sr build-tools/20.0.0/lib platform-tools/lib
    
por zwets 16.09.2014 / 12:03
2

Você pode vincular a um PATH não existente (arquivo ou diretório)

abox $ ls
abox $ ln -s foo bar
abox $ ls
bar  (<- in red)
abox $ ls -l
total 0
lrwxrwxrwx 1 archemar archemar 3 sept. 16 10:47 bar -> foo  ## both foo and bar in red

Por que alguém faria isso?

Mais tarde, posso criar foo file / dir e o link funcionará.

enquanto o diretório build-tools/20.0.0/lib/ não exsistir, seu link será quebrado.

    
por Archemar 16.09.2014 / 10:52
0

Eu diria que você está em um diretório

  

/ media / john / android / workspace_b4a / android-sdk-linux /

e você deseja criar um link simbólico para o diretório '/build-tools/20.0.0/lib'. Você pode fazer isso por

     ln -sv /media/john/android/workspace_b4a/android-sdk/build-tools/20.0.0/lib platform-tools/lib

EDITAR : a saída de

   ls -l platform-tools/lib

Também será alterado.

    
por RishbhSharma 16.09.2014 / 10:32