Como encontrar links simbólicos que apontam para fora de uma determinada árvore de pastas?

3

Eu tenho um monte de pastas / arquivos com mais de 10 níveis de profundidade.

Como posso encontrar links simbólicos que apontam para fora dessa árvore de pastas?

Eu tentei find -type l , mas isso retorna todos os links ... mesmo aqueles cujo destino é na árvore de pastas.

Obrigado

    
por nonot1 30.01.2012 / 18:16

1 resposta

2

Se todos os alvos de links simbólicos forem absolutos, você pode fazer algo assim:

find /folder/tree -type l -not -lname '/folder/tree/*' -print

No entanto, se você tiver links relativos em sua árvore, especialmente aqueles com ./ ou ../ incorporado nos caminhos de destino, provavelmente será necessário percorrer cada um deles para normalizar o destino e ver se corresponde à árvore de pastas:

find /folder/tree -type l -print | \
    while read symlink
    do
        target=$(readlink -f "$symlink")
        expr match "$target" "^/folder/tree/.*" >/dev/null || echo "$symlink"
    done
# end of pipeline

Ambos fazem a mesma coisa, que é imprimir cada link simbólico que tem um alvo que não corresponde a /folder/tree .

    
por 30.01.2012 / 22:05