listar arquivos por destino do symlink

20

Como obtenho uma lista de arquivos (e então faço algo com essa lista) filtrando através do link simbólico target name, e não o nome do symlink? Por exemplo, na lista a seguir, estou interessado somente nos primeiros quatro 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
    
por matt wilkie 10.05.2011 / 09:02

1 resposta

27

Você pode usar find para buscar todos os arquivos do tipo symlink e adicionar a opção -ilname para pesquisar pelo nome do destino do link. Isso funciona como -iname , mas para o nome do destino do link, em vez do nome do link.

find -type l -ilname "*bar*"

Isso ainda imprime o nome do link, não o alvo. Se você quiser imprimir os nomes dos alvos, tente isto:

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

Ou obtenha uma saída completa em ls style

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

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

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

Mas se você precisar operar nos destinos de link, precisará usar o -printf para obter os valores de destino e, em seguida, xargs ou algum loop para operar. Você poderia fazer algo assim:

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

... que também demonstra como usar grep em vez de find -ilname para fazer a correspondência do seu nome, embora você possa fazer isso de qualquer forma.

    
por 10.05.2011 / 09:12

Tags