você está aqui: Home  → Arquivo de Mensagens

Como localizar e salvar links simbólicos

Colaboração: Aurelio Marinho Jargas

Data de Publicação: 28 de Agosto de 2002

Às vezes por causa de algum 'cp' descuidado, copia-se apenas os arquivos e ficam faltando os links simbólicos. ou ainda, como saber quais são os links simbólicos de um determinado diretório e para onde eles apontam. a resposta é mais simples do que se imagina: find.

assim como "-type d" procura apenas por diretórios, o find possui a opção "-type l" para procurar links simbólicos. então já sabemos como encontrar quais são os links. resta saber para onde eles apontam.

o find do GNU possui a opção -printf, que possui vários

     %k   tamanho do arquivo em Kbytes
     %p   nome completo do arquivo (dirname+basename)
     %f   nome do arquivo (basename)
     %h   nome do diretório (dirname)
     %m   permissões do arquivo
     %l   destino do link simbólico

"man find" tem todos os outros.

então para saber quais são os links simbólicos de um diretório e para onde eles apontam, basta um:

  prompt$ find /etc -type l -printf "%p -> %l\n"
  /etc/sysconfig/network-scripts/ifdown -> ../../../sbin/ifdown
  /etc/sysconfig/network-scripts/ifup -> ../../../sbin/ifup
  /etc/versão-conectiva -> conectiva-release
  /etc/rc.d/init.d/smb -> /usr/sbin/samba
  /etc/rc.d/init.d/linuxconf-setup ->
  /usr/lib/linuxconf/conectiva/scripts/S99linuxconf
  /etc/rc.d/rc0.d/S00killall -> ../init.d/killall
  /etc/rc.d/rc0.d/S01halt -> ../init.d/halt
  /etc/rc.d/rc0.d/K80random -> ../init.d/random
  /etc/rc.d/rc0.d/K75netfs -> ../init.d/netfs
  /etc/rc.d/rc0.d/K90network -> ../init.d/network
  ...[e continua]

abusando só um pouquinho dessa poderosa possibilidade, podemos "salvar" o estado atual dos links simbólicos, gerando um script para reconstruí-los caso necessário:

    #!/bin/sh
    # ln-save - gera um script de reconstrução de symlinks
  
    echo 'OLDPWD=$PWD'
    find "${1:-.}" -type l \
      -printf "echo %l; cd %h; ln -s %l %f; cd \$OLDPWD\n"

exemplo de uso:

  prompt$ cd /etc ; ln-save > /tmp/reconstroi-links.sh
  prompt$ cd /etc-novo ; sh /tmp/reconstroi-links.sh
  http://aurelio.net


 

 

Veja a relação completa dos artigos de Aurelio Marinho Jargas

Opinião dos Leitores

Carlos Eduardo
21 Set 2016, 00:26
MUito bom cara! Sério mesmo, artigo de 2003 me servindo agora em 2016, obrigado.
Mas só uma pergunta: Sabe se há um modo de imprimir o caminho completo dos links sem ser com "../../lib"? Gostaria de algo que mostrasse o caminho inteiro a partir da riz como "/lib/libblablabla" assim como mostra no caminho do arquivo.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script