De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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
$ cd /etc ; ln-save > /tmp/reconstroi-links.sh $ cd /etc-novo ; sh /tmp/reconstroi-links.sh
Conheça o blog do autor
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários