comtesting si hay un enlace del file actual

¿Cómo puedo verificar si hay un enlace del file actual en Linux? Diga, tengo:

touch foo ln -s foo bar ll foo bar bar -> foo foo 

Ahora, quiero saber si hay algún file vinculado desde foo : por ej.

 $magic-command foo foo<-bar 

Con GNU find , puedes hacer:

 find -L / -xtype l -prune -samefile foo -exec ls -ld {} + 

Eso encontrará todos los files de tipo enlaces simbólicos que finalmente se resuelven en el mismo file que foo . Eso también includeá enlaces simbólicos a enlaces simbólicos o enlaces duros a foo 1 .

Con -L , se siguen los enlaces simbólicos. Queremos que find files vinculados a foo , pero no queremos seguir el enlace simbólico al descender el tree de directorys. De ahí el -prune que deja de descender en enlaces simbólicos.

Con zsh , puedes hacer:

 ls -ld /**/*(@De:'[[ $REPLY -ef foo ]]':) 

Si solo estás interesado en enlaces simbólicos.


1 Encontrar solo files que sean enlaces simbólicos a foo sería más complicado. El -samefile / -ef compara el dispositivo y los numbers de inodo devueltos por la llamada al sistema stat() , es decir, después de que todos los enlaces simbólicos hayan sido resueltos (por el sistema). Lo que desea es verificar los enlaces cuyo directory de destino es el mismo que el de foo y el nombre base es foo .

Con zsh , eso sería:

 zmodload zsh/zstat links_to_thefile() { local file link file=${1-$REPLY} zstat -L -A link +link -- $file || return [[ $link:t = $thefile:t ]] || return case $link in (/*) file=$link;; (*) file=$file:h/$link esac [[ $file:h -ef $thefile:h ]] } thefile=foo ls -ld /**/*(@D+links_to_thefile) 

O con las herramientas de GNU ( find y shell ( bash )):

 find / -type l \( -lname foo -o -lname '*/foo' \) -printf '%p\0%l\0' | while IFS= read -rd '' file && IFS= read -rd '' link; do [[ $link = /* ]] || link=${file%/*}/$link [[ ${link%/*} -ef . ]] && printf '%s\n' "$file" done 

stat no count recuentos de enlaces simbólicos, sin embargo, enlaces duros, si eso ayuda.

No hay forma de resolver lo que estás preguntando.