Eu quero criar um link simbólico locations
para ~/locations
.
Para que tudo locations
apareça em ~/locations
:
λ tree locations/
locations/
├── adelaide
│ └── config
├── amber
│ └── config
├── austin
│ └── config
├── boston
│ └── config
├── boulder
│ └── config
├── durham
│ └── config
├── jade
│ └── config
├── losangeles
│ └── config
├── minsk
│ └── config
├── newcastle
│ └── config
├── opal
│ └── config
└── pearl
└── config
Quando tento vinculá-los simbolicamente, não faz o que espero:
λ ln -s locations/*/* ~/locations
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations/config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations/config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
ln: /Users/bob.smith/locations//config: File exists
tree locations
λ tree ~/locations/
/Users/bob.smith/locations/
└── config -> locations/Adelaide/config
Como você pode ver, o diretório after locations
está faltando na saída.
O que estou fazendo de errado aqui?
Não está claro qual efeito exato você está tentando obter: apenas um link simbólico de diretório ou um "link farm" onde os links simbólicos apontam para arquivos individuais?
Um link simbólico é um pequeno arquivo que contém um caminho. Quando esse arquivo é visitado durante a resolução do nome, esse caminho é substituído em seu lugar. O caminho pode ser relativo ou absoluto.
Para criar um link simbólico de diretório, basta fazer o seguinte:
No entanto, isso tem um problema! Ele criará um link simbólico chamado
locations
em seu diretório inicial, como/home/yourname/locations
. O conteúdo desse link simbólico será o caminho relativolocations
. Em outras palavras, esse link simbólico apontará para si mesmo, criando um loop inútil.Você precisa fornecer o caminho relativo correto, ou então um caminho absoluto, como:
Se você tiver um utilitário chamado
realpath
, poderá fazer isso diretamente no diretório pai cujo filho élocations
:realpath
imprime um caminho absoluto paralocations
, no qual todos os links simbólicos são resolvidos; a$(...)
sintaxe de substituição de comando substitui isso na linha de comando. Coloquei aspas caso o caminho resultante contenha espaços em branco que o dividiriam em vários argumentos.É possível espelhar uma árvore de arquivos usando links simbólicos. Existe um utilitário para aquele chamado
lndir
que se originou no sistema XWindow. Normalmente, se você quiserlndir
instalar em uma distribuição GNU/Linux, ele é empacotado junto com o material X.lndir
cria um esqueleto de árvore de diretórios vazio que imita a árvore de diretórios original e a preenche com links simbólicos para os arquivos originais correspondentes.Se você tiver uma árvore de arquivos que gostaria de acessar por meio de um diretório simples de links simbólicos, será necessário escrever um script para isso.