enlace simbólico: busque todos los archivos que se vinculan a este archivo

Respuestas:

132

Depende, si está tratando de encontrar enlaces a un archivo específico que se llama foo.txt,, esta es la única buena manera:

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

Por otro lado, si solo está tratando de encontrar enlaces a cualquier archivo que tenga un nombre foo.txt, entonces algo como

find / -lname foo.txt

o

find . -lname \*foo.txt # ignore leading pathname components
DigitalRoss
fuente
problema resuelto maravillosamente. Gracias a todas las personas que respondieron.
lukmac
8
Como comenté en una respuesta eliminada, puede usar -xtype lpara buscar solo enlaces simbólicos de la lista
Hasturkun
es posible que desee recurrir, ya que cualquiera de los archivos que apuntan a foo.txt pueden ser señalados por otros enlaces ... ej: A-> B-> foo.txt, / tmp / C-> B-> foo.txt, etc.
Olivier Dulac
esto también puede funcionar si su componente de nombre es un directorio principal nombrado en el enlace, buscando find . -lname '*foo.dir*'(por ejemplo, coincide file.txt -> ../foo.dir/file.txt)
Yonatan
22

Busque el número de inodo del archivo y luego busque todos los archivos con el mismo número de inodo:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

Alternativamente, pruebe la lnameopción de find, pero esto no funcionará si tiene enlaces simbólicos relativos, por ejemploa -> ../foo.txt

$ find . -lname /path/to/foo.txt
dogbane
fuente
3
Si usa una versión reciente de GNU find, también puede usar la -samefileopción con -Lpara obtener el mismo efecto, sin tener que buscar el inodo usted mismo
Hasturkun
5
Pero esto también encontrará archivos en otros sistemas de archivos que tengan el mismo número de inodo.
DigitalRoss
Si fooes un directorio, use ln -di, en una línea:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77
1
Esta respuesta es incorrecta. Un enlace simbólico no tiene el mismo inodo que su objetivo. Esto solo funcionará para un archivo dentro de una carpeta enlazada simbólicamente. Pero esto no es lo que se preguntó.
Jules Lamur
4

Prefiero usar la symlinksutilidad, que también es útil para buscar enlaces simbólicos rotos. Instalar por:

sudo apt install symlinks

Mostrar todos los enlaces simbólicos en la carpeta y subcarpetas actuales:

symlinks -rv .
  • -r: recursivo
  • -v: detallado (muestra todos los enlaces simbólicos, no solo los rotos)

Para encontrar un enlace simbólico específico, simplemente grep:

symlinks -rv . | grep foo.txt
Nik
fuente