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


24

É possível que mvum arquivo sem quebrar um link simbólico para esse arquivo? Minha resposta inicial a isso é não, e estou elaborando uma solução baseada em script para alterar os links imediatamente após a mudança, mas fiquei imaginando como outras pessoas abordaram esse problema. Os caminhos e nomes dos links simbólicos são conhecidos antecipadamente; portanto, em teoria, tudo o que preciso fazer é:

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

Numa data posterior:

  1. excluir o link antigo

O 1-4 será encapsulado em um script bash, mas estou me perguntando se alguém tem uma abordagem mais elegante ou conhece um comando ou comando interno do qual não conheço.


2
Links físicos não têm esse problema. Eles têm outras desvantagens. :-)
Stéphane Gimenez

3
Sim, não é possível usar hardlinks, pois os arquivos estão em vários sistemas de arquivos.
Gabe.

2
Além disso: não é possível criar um link direto para um diretório.
Sampablokuper 23/04/19

Respostas:


8

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

Os passos 3 e 4 são um pouco confusos. Se você deseja redirecionar os links existentes, mantenha o mesmo nome ln -fpara substituir os arquivos existentes. Se você deseja que o nome de seus links também mude para refletir o novo nome de destino, sua sequência está correta.


11
Heh, sim, basta reler essa parte e agora eu também me confundi. Vou ajustá-lo para que faça mais sentido. Obrigado.
Gabe.

Estou um pouco confuso com o uso de ln -f, mas acho que o script @fred postado pode ajudar a esclarecer como funciona. A página de manual não foi de muita ajuda, surpreendentemente.
Gabe.

@gabe. A versão original da minha resposta estava correta -s -f, mas, enquanto a aperfeiçoava, "perdeu" o -s: errado! Da wikipedia : 'ln' sem opções cria um link físico, 'ln -f' força um link físico ... então, obrigado pela pergunta, ele realmente confirmou a sintaxe para mim agora .. Certamente me fez checar novamente coisas ... Ela exige ln -s -f.. (eu fiz o ajuste)
Peter.O

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

Nota: será mais complicado se uma cadeia de links estiver envolvida.
Peter.O

0

Eu tenho o próximo problema. Encontrei um tema de ícone muito bom chamado "Suru ++"

Suru ++ 20 [Oficialmente livre de bugs e 11 DEs compatíveis]

Mas este tema ícone é feito em svg all image. Agora eu quero usá-lo no Fluxbox e gerar entradas de menu, mas isso só é possível com imagem de ícone png. Eu baixo o master dentro de todos os ícones no formato svg, e sim eu posso converter da linha de comando svg para png tudo ok gerar para cada tamanho da pasta, como 16x16, 24x24 px. Mas nessas pastas existem links simbólicos para arquivos svg:

extensões svg dentro de links simbólicos que eu quero mudar para png

Se existe uma maneira possível de alterar a extensão svg para png dentro de todos os links da symbolix, o tema do ícone funcionaria bem no menu Fluxbox e em Gerenciadores de arquivos. Eu fiz uma entrada sobre esse tema de ícone usando no Xubuntu, mas em espanhol

Deus abençoe

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.