Como encontrar todos os links flexíveis (links simbólicos) no diretório atual?


10

A pergunta está relacionada ao script de shell em bash.

Como verificar com um script quais arquivos no diretório atual são links flexíveis?

Caso eu tenha usado o termo errado, quando digo links flexíveis , refiro-me aos arquivos criados usando ln -s.

A única coisa que consegui pensar é avaliar ls -lacomo uma expressão e analisar seus resultados, mas obviamente essa não é a melhor solução.


1
Eles são chamados de "links simbólicos" (em oposição a "links físicos").
Pausado até novo aviso.

Righto, eu sabia que provavelmente tinha entendido errado o termo, obrigado pelo
aviso

O link suave também é bom, mas com um espaço. :-) ( pt.wikipedia.org/wiki/Symbolic_link )
Arjan 17/11

Respostas:



14

Você pode realmente não precisar de um script. Para mostrar qualquer link simbólico apenas na pasta atual, sem recorrer a nenhuma pasta filho:

encontrar . -maxdepth 1 -type l -print

Ou, para obter mais informações, use um dos seguintes:

encontrar . -maxdepth 1 -type l -exec ls -ld {} +
encontrar . -maxdepth 1 -type l -print0 | xargs -0 ls -ld

Para saber se um arquivo é um link simbólico, pode-se usar readlink, o que não produzirá nada se não for um link simbólico. O exemplo a seguir não é muito útil, mas mostra como readlinkignora arquivos e pastas normais. Use um dos seguintes:

encontrar . -maxdepth 1 -exec readlink {} +
encontrar . -maxdepth 1 -print0 | xargs -0 readlink

Observe que o acima -exec ... +e xargs ...são muito mais rápidos que -exec ... \;. Gostar:

localização de hora / usr / bin -maxdepth 1 -type l -exec ls -ld {} \;
0m0.372s reais
usuário 0m0.087s
sys 0m0.163s

localização de hora / usr / bin -maxdepth 1 -type l -exec ls -ld {} +
0m0.013s reais
usuário 0m0.004s
sys 0m0.008s

localizador de horário / usr / bin -maxdepth 1 -type l -print0 | xargs -0 ls -ld
0m0.012s reais
usuário 0m0.004s
sys 0m0.009s

Gostei mais da resposta de Polsy, ainda com +1 para você, pois talvez eu precise fazer isso fora de um shell script algum dia.
bguiz

1
Você não precisa necessariamente de xargs. Você poderia apenas usar o find. -maxdepth 1 -exec readlink {} \;
Stib

Verdadeiro, @stib, mas xargsé muito mais rápido no meu Mac; veja minha edição. Mas eu aprendi algo novo hoje: há também +, em vez de \;(Embora alguns afirmam que isso tem / teve problemas com grep.)
Arjan
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.