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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.