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.