Existe uma maneira de substituir o valor do link simbólico? [duplicado]

8

Existe uma maneira de substituir o valor do link simbólico?

Por exemplo, quero substituir o link simbólico assim:

first -> /home/username/foo/very/long/directories/that/I/do/not/want/to/type/again 

para

second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again

Eu quero alterar apenas foo para bar .

É claro que posso criar um link novamente, mas se for possível substituir o valor do link, ficará mais fácil.

    
por ironsand 27.09.2013 / 14:51

2 respostas

10

Você pode usar a opção -f , --force de ln para remover o link simbólico existente antes de criar o novo. Se o destino for um diretório, você precisará adicionar a opção -n , --no-dereference para informar ln para tratar o symlink como um arquivo normal.

ln -sfn target existing_link

No entanto, esta operação não é atômica, já que ln irá unlink() do antigo link simbólico antes de chamar symlink() , então, tecnicamente, não conta como alterar o valor do link. Se você se importa com essa distinção, a resposta é não, você não pode alterar o valor de um link simbólico existente.

Dito isso, você pode fazer algo parecido com o seguinte para criar um novo symlink, alterando parte do valor do link antigo:

  ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"
    
por 27.09.2013 / 15:01
1
second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again

Se você está correndo dentro do X:

stat second

Imprimirá o link e algumas outras informações. Digite ln -s e, em seguida, destaque /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again com o cursor do mouse. Pressione o botão do meio (ou ambos os botões se você tiver apenas dois). A linha longa que você não quis digitar novamente será colada no cursor de texto.

Se você não está no X, pode fazer o mesmo instalando gpm .

    
por 27.09.2013 / 15:10

Tags