Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
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
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.




