link simbólico: encontre todos os arquivos vinculados a este arquivo

Respostas:

132

Depende, se você está tentando encontrar links para um arquivo específico chamado, foo.txt,então esta é a única boa maneira:

find -L / -samefile path/to/foo.txt

Por outro lado, se você está apenas tentando encontrar links para qualquer arquivo que tenha um nome foo.txt, algo como

find / -lname foo.txt

ou

find . -lname \*foo.txt # ignore leading pathname components
DigitalRoss
fonte
problema resolvido lindamente. Obrigado a todas as pessoas que responderam.
lukmac
8
Como comentei em uma resposta excluída, você pode usar -xtype lpara encontrar apenas links simbólicos de lista
Hasturkun
você pode querer recursar, já que qualquer um dos arquivos apontando para foo.txt pode ser apontado por alguns outros links ... ex: A-> B-> foo.txt, / tmp / C-> B-> foo.txt, etc.
Olivier Dulac
isso pode funcionar também se o seu componente de nome for um diretório pai nomeado no link, pesquisando find . -lname '*foo.dir*'(corresponde, por exemplo file.txt -> ../foo.dir/file.txt)
Yonatan
22

Encontre o número de inode do arquivo e pesquise todos os arquivos com o mesmo número de inode:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

Alternativamente, tente a lnameopção de find, mas isso não funcionará se você tiver links simbólicos relativos, por exemploa -> ../foo.txt

$ find . -lname /path/to/foo.txt
dogbane
fonte
3
Se estiver usando uma versão recente do GNU find, você também pode usar a -samefileopção com -Lpara o mesmo efeito, sem ter que procurar o inode você mesmo
Hasturkun
5
Mas isso também encontrará arquivos em outros sistemas de arquivos que tenham o mesmo número de inode.
DigitalRoss
Se foofor um diretório, use ln -diem uma linha:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77
1
Essa resposta está errada. Um link simbólico não tem o mesmo inode de seu destino. Isso funcionará apenas para um arquivo dentro de uma pasta com link simbólico. Mas não foi isso que foi perguntado.
Jules Lamur
4

Eu prefiro usar o symlinksutilitário, que também é útil ao pesquisar links simbólicos corrompidos. Instalar por:

sudo apt install symlinks

Mostrar todos os links simbólicos na pasta e subpastas atuais:

symlinks -rv .
  • -r: recursivo
  • -v: verboso (mostra todos os links simbólicos, não apenas os corrompidos)

Para encontrar um link simbólico específico, basta grep:

symlinks -rv . | grep foo.txt
Nik
fonte