¿Buscar no funciona en una ruta con enlace simbólico?

¿Buscar no funciona en una ruta con enlace simbólico?

Si ejecuto este comando find $HOME/MySymlinkedPath -name "run*.sh"no sucede nada y no aparece ningún error ('MySymlinkedPath' es una ruta con enlace simbólico a otro disco duro que no sea mi $HOME).

Estos también fallan:

find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"

Y solo para estar seguro, esta ruta inexistente falla (por supuesto), find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"por lo que se encuentra la ruta (porque ese error no ocurre) pero findno se realiza la búsqueda, y ahora no tengo ni idea.

Solo funciona si cd $HOME/MySymlinkedPathprimero elimino la referencia de ruta de esta manera, find -name "run*.sh"pero eso no es bueno para mis scripts.

Una información adicional:
este comando funciona como de costumbre ls $HOME/MySymlinkedPath/run*.sh, y si voy allí cd $HOME/MySymlinkedPathy lo ejecuto, ls ..el resultado no es el que esperaba - la lista de la ruta donde se encuentra la ruta enlazada simbólicamente - devuelve la lista de la ruta real en el otro medio /¡¡¡disco duro!!!

pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath

Repensar:
¿Es esto un problema con findy lso con mi sistema? ¿O es lo esperado y no es ningún problema? Estoy en Ubuntu 12.10. Falla en todos los terminales que probé, por lo que no parece un "problema" de terminal.

Respuesta1

Aquíes la respuesta. Pero esa pregunta apunta a bash como el objetivo del problema.

La explicación es que findse encuentra "$HOME/MySymlinkedPath". Es un enlace simbólico, no un directorio, por lo que el descenso recursivo se detiene allí. Si la expresión coincide "$HOME/MySymlinkedPath"(por ejemplo, en find "$HOME/MySymlinkedPath" -name 'My*'), findse imprimirá como una coincidencia.

Como se señaló allí, descubrí que la forma más fácil y limpia de solucionarlo y corregir todos los scripts es, en lugar de:

find "$HOME/MySymlinkedPath" -name "run*.sh"

simplemente agregue una barra, de modo que findno comience desde el enlace simbólico sino desde el destino del enlace simbólico:

find "$HOME/MySymlinkedPath/" -name "run*.sh"

Alternativamente, pase la -Hopción a find(tenga en cuenta que debe aparecer primero, antes de las rutas) para indicarle que atraviese los enlaces simbólicos pasados ​​en su línea de comando. (Esto también es diferente de -Llo que indica que se deben atravesar enlaces simbólicos encontrados durante el descenso recursivo).find

find -H "$HOME/MySymlinkedPath" -name "run*.sh"

Y finalmente funcionó mejor aquí -L(debido a los varios sistemas de archivos que he vinculado simbólicamente a través de carpetas). Pero genera muchos mensajes de error no problemáticos, así que agregué 2>/dev/null; y también decidió crear este alias alias find='find -L':

find -L "$HOME/MySymlinkedPath" -name "run*.sh" 2>/dev/null

información relacionada