mv um arquivo sem quebrar um link simbólico para esse arquivo

21

É possível mv um arquivo sem o link simbólico para esse arquivo? Minha resposta inicial para isso é não, e estou trabalhando em uma solução baseada em script para alterar os links imediatamente após a mudança, mas eu queria saber como os outros abordaram essa questão. Os caminhos e nomes dos links simbólicos são conhecidos antecipadamente, então, em teoria, tudo que eu preciso fazer é:

  1. obtenha o alvo do link
  2. mv o alvo
  3. recriar o link para o novo alvo
  4. crie um novo link para o novo alvo (diferente do link original, que ainda quero manter por enquanto)

Em uma data posterior:

  1. elimine o link antigo

1-4 será encapsulado em um script bash, mas eu estou querendo saber se alguém tem uma abordagem mais elegante, ou sabe de um built-in ou comando que eu não conheço.

    
por gabe. 23.08.2011 / 16:33

2 respostas

7

Você está no caminho certo, não acho que haja uma maneira mais fácil do que a sequência descrita.

Os passos 3 e 4 são um pouco confusos. Se você quiser redirecionar os links existentes mantendo o mesmo nome, use ln -f para sobrescrever os arquivos existentes. Se você quiser que o nome de seus links também seja alterado para refletir o novo nome de destino, sua sequência está correta.

    
por 23.08.2011 / 17:02
4

Para sua situação:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link
    
por 23.08.2011 / 16:47