você está aqui: Home  → Arquivo de Mensagens Programe sua mente para aprender inglês - ebook gratuito

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 %<qualquer-coisa> que são úteis.

Alguns exemplos:

Diretiva Significado
%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.

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

 $ 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:

$ cd /etc ; ln-save > /tmp/reconstroi-links.sh
$ cd /etc-novo ; sh /tmp/reconstroi-links.sh
Conheça o blog do autor


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