Preciso encontrar todos os arquivos vinculados em um determinado sistema de arquivos. Por exemplo, obtenha uma lista de arquivos, cada linha contém pares vinculados, ou trigêmeos, etc.
Entendo mais ou menos como fazê-lo, é necessário criar um dicionário digitado por inode para todos os arquivos / diretórios em um sistema de arquivos, exclua "." e ".." links e, em seguida, códigos com mais de um nome são hardlinks ... Mas espero que exista uma solução pronta ou que alguém já tenha escrito esse script.
find / -type f -links +1 -printf '%i %n %p\n'
sort
(+uniq
)? Fiquei curioso, então tentei no meu computador principal (16GB i5-2500k com ssd). com 2187757 files (find / -xdev -type f | wc
) leva 12 segundos reais ao retornar 3820 arquivos / 570 inodes (time sudo find / -xdev -type f -links +1 -printf "%i\n" | sort | uniq | wc
). você precisaria incluir os%n %p
arquivos reais, como eu os tirei para contar inodes.fornece uma lista de todos os arquivos que possuem mais de um link, ou seja, arquivos para os quais existe um link físico. Fazer um loop sobre isso é relativamente fácil - uma solução hacky, se você não tiver muitos arquivos, seria
Mas, sinceramente, espero que haja soluções melhores, por exemplo, permitindo que a primeira
find
chamada imprima números de inode e, em seguida, usefind
a-inum
opção 's para mostrar todos os arquivos associados a esse inode.fonte
find . -type f -printf '%i %p\n'
, permitiria criar uma solução muito mais rápida.for
loop, o ajuste do IFS adequadamente funcionaria. Para analisar a saída do comando find no meu comentário, declarar tudo entre o primeiro espaço e o final da linha como o nome do arquivo também deve funcionar.lost+found
etc.); o que é especialmente importante, se a saída for processada como na segunda linha.IMHO, a melhor maneira é usar a seguinte linha (com certeza você deve substituir
/PATH/FOR/SEARCH/
pelo que deseja pesquisar):isso varre o sistema de arquivos apenas uma vez, mostra o inode, o número de hardlinks e o caminho dos arquivos com mais de um hardlink e os classifica de acordo com o inode.
se você estiver aborrecido com mensagens de erro para pastas que não têm permissão para ler, você pode expandir a linha para isso:
fonte