listar arquivos por destino de link simbólico

23

Como obtenho a lista de arquivos (e faço alguma coisa com essa lista) filtrando o nome do destino do link simbólico e não o nome do link simbólico? Por exemplo, na lista a seguir, estou interessado apenas nos quatro primeiros arquivos (o destino contém bar):

foo ->  /tmp/bar
bar ->  /home/me/bartoo
baz ->  /home/me/public/barthree
zoo ->  /usr/share/bar
moo ->  /tmp/foo
roc ->  /tmp/roc
Matt Wilson
fonte

Respostas:

31

Você pode usar o find para buscar todos os arquivos do tipo link simbólico e adicionar a -ilnameopção de pesquisar pelo nome do destino do link. Isso funciona exatamente como -inameno nome do destino do link, em vez do nome do link.

find -type l -ilname "*bar*"

Isso ainda imprimirá o nome do link, não o destino. Se você deseja imprimir os nomes dos destinos, tente o seguinte:

find -type l -ilname "*bar*" -printf "%l\n"

Ou obtenha uma lssaída de estilo completo

find -type l -ilname "*bar*" -ls

O que você quer dizer com " fazer algo com a lista " não é claro, mas se você quiser operar nos arquivos de link, poderá usar o -execargumento para encontrar:

find -type l -ilname "*bar*" -exec touch {} \;

Porém, se você precisar operar nos destinos de link, precisará usar o -printfpara obter os valores de destino e, em seguida, fazer xargsum loop para operar. Você poderia fazer algo assim:

find -type l -printf "%l\n" | grep bar | xargs touch

... que também demonstra como usar em grepvez de find -ilnamefazer a correspondência do seu nome, embora você possa fazer isso de qualquer maneira.

Caleb
fonte
obrigado Caleb! Você respondeu completamente à minha pergunta imediata, além de cobrir alguns casos de canal lateral que eu definitivamente vou usar também.
226118 #
1
Alguma idéia de por que isso find /dev/disk/ -type l -ilname "*sde*"não funciona?
Poder de Aquário
Requer localização GNU.
ceving 15/09/16