Como encontro links simbólicos circulares?

12

Estou trabalhando em um sistema HP-UX e quero descobrir se existem links simbólicos circulares.

Até agora estou usando o comando:

ls -lrt  'find ./ -follow -type l'

Mas está apenas fazendo ls -lrt no diretório atual como resultado.

Qual comando devo usar para encontrar todos os links simbólicos circulares em um sistema?

    
por Vladimir 02.05.2011 / 21:58

1 resposta

17

A manpage do GNU find diz que todos os achados do POSIX devem detectar loops do sistema de arquivos e emitir mensagens de erro nesses casos, e eu testei

find . -follow -printf ""

no GNU find, que conseguiu encontrar loops no formato ./a -> ./b e ./b -> ./a imprimindo o erro

find: './a': Too many levels of symbolic links
find: './b': Too many levels of symbolic links

(isso também funcionou em a->b->c->a )

Da mesma forma, os loops no formato ./foo/x -> .. e ./foo/a -> ./bar + ./bar/b -> ./foo imprimiram os erros

find: File system loop detected; './foo/a/b' is part of the same file system loop as './foo'.
find: File system loop detected; './bar/b/a' is part of the same file system loop as './bar'.
find: File system loop detected; './foo/x' is part of the same file system loop as '.'.

Se você quisesse fazer algo com a saída diferente de lê-la, seria necessário redirecioná-la de stderr para stdout e canalizá-la para algum script que possa analisar as mensagens de erro.

    
por 02.05.2011 / 23:05