listar todos os links simbólicos para diretórios válidos somente com find

6

eu posso usar

find /search/location -type l

para listar todos os links simbólicos dentro de / search / location .

Como limitar a saída de find para links simbólicos que se referem a um diretório válido e excluir ambos, links simbólicos quebrados e links para arquivos?

    
por muffel 22.03.2015 / 12:26

3 respostas

6

Com o GNU find (a implementação em Linux e Cygwin não embarcados):

find /search/location -type l -xtype d

Com as implementações de localização sem o -xtype primary, você pode usar duas invocações de find , uma para filtrar links simbólicos e outra para filtrar aquelas que apontam para diretórios:

find /search/location -type l -exec sh -c 'find "$@" -L -type d -print' _ {} +

ou você pode chamar o programa test :

find /search/location -type l -exec test {} \; -print

Alternativamente, se você tiver zsh, é apenas uma questão de dois qualificadores da glob ( @ = é um link simbólico, - = os seguintes qualificadores agem no destino do link, / = é um diretório):

print -lr /search/location/**/*(@-/)
    
por 22.03.2015 / 19:03
1

Tente:

find /search/location -type l -exec test -e {} \; -print 

De man test :

   -e FILE
          FILE exists

Você também pode se beneficiar com esta resposta do U & L a Como posso encontrar links simbólicos quebrados ; não deixe de ler os comentários também.

Editar : test -d para verificar se "FILE existe e é um diretório"

find /search/location -type l -exec test -d {} \; -print 
    
por 22.03.2015 / 12:42
0

Aqui você vai:

for i in $(find /search/location -type l); do 
  test -d $(readlink $i) && echo $i 
done
    
por 22.03.2015 / 12:36