Como encontrar todos os links simbólicos apontando para qualquer arquivo / diretório dentro de um determinado diretório

10

Sobre esta questão ou neste (por exemplo) você vai encontrar soluções sobre como procurar links simbólicos apontando para um determinado diretório (vamos chamá-lo de /dir1 ), enquanto eu estou interessado em links simbólicos possivelmente apontando para qualquer arquivo / pasta dentro de /dir1 .

Eu quero excluir esse diretório, mas não tenho certeza de que estou seguro para fazer isso, como em outro diretório (vamos chamá-lo /dir2 ), posso ter links simbólicos apontando para partes internas de /dir1 . / p>

Além disso, eu posso ter criado esses links simbólicos usando caminhos absolutos ou relativos. Minha única ajuda é que eu sei que os links simbólicos que eu quero verificar estão em um sistema de arquivos montado, em /dir2 .

    
por Antonello 06.08.2016 / 11:36

3 respostas

11

Você pode encontrar todos os links simbólicos usando:

find / -type l 

você pode querer executar isso como root para acessar todos os lugares do disco.

Você pode expandi-los usando readlink -f para obter o caminho completo do link e deve poder grep da saída em relação ao diretório de destino que está considerando para exclusão:

find / -type l -exec readlink -f {} + | grep -F /dir2

O uso de find / -type l -printf '%l\n' não funciona, pois você obtém links relativos como ../tmp/xyz , que podem estar apontando para o diretório de destino, mas não são correspondidos porque não estão totalmente expandidos.

    
por 06.08.2016 / 11:53
0

No meu caso, a resposta aceita não foi útil (porque não gerou a origem do link). Aqui está o que funcionou para mim.

Eu trabalhei em torno dele usando duas cláusulas -exec :

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"
    
por 20.11.2018 / 15:41
0

com zsh :

printf '%s\n' /dir2/**/*(D@e'([[ $REPLY:P = /dir1(/*|) ]])')
    
por 20.11.2018 / 16:32

Tags