¿Por qué **encuentra** no encuentra nada?
Pregunta
Estoy buscando archivos de scripts de shell instalados en mi sistema, pero encontrar no funciona:
$ find /usr -name *.sh
Pero sé que hay un montón de guiones por ahí.Por ejemplo:
$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh
/usr/local/lib/tkConfig.sh
¿Por qué no encontrar ¿trabajar?
Solución
Intente citar el comodín:
$ find /usr -name \*.sh
o:
$ find /usr -name '*.sh'
Si tiene un archivo que coincide *.sh en el directorio de trabajo actual, el comodín se expandirá antes de que find lo vea.Si tiene un archivo llamado tkConfig.sh en su directorio de trabajo, el encontrar El comando se expandiría a:
$ find /usr -name tkConfig.sh
que solo encontrará archivos llamados tkConfig.sh.Si tuviera más de un archivo que coincida *.sh, obtendrías un error de sintaxis de encontrar:
$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list
Nuevamente, el motivo es que el comodín se expande a ambos archivos:
$ find /usr -name tclConfig.sh tkConfig.sh
Citar el comodín evita que se expanda prematuramente.
Otra posibilidad es que /usr o uno de sus subdirectorios sea un enlace simbólico. encontrar normalmente no sigue enlaces, por lo que es posible que necesites el -seguir opción:
$ find /usr -follow -name '*.sh'
Otros consejos
En algunos sistemas (Solaris, por ejemplo), no existe una acción predeterminada, por lo que es necesario agregar el comando -print.
find /usr -name '*.foo' -print
Para encontrar archivos en sus discos, inclínese por usar "localizar" en su lugar que sea instantáneo (busca en un índice construido diariamente) tu ejemplo sería:
locate '/usr*.sh'