2008-08-20 20 views
17

Busco shell scripts archivos instalados en mi sistema, pero encuentran no funciona:¿Por qué ** ** no encuentra nada?

$ 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 encuentran trabajo?

+2

¿Es esta pregunta un superusuario ? – endolith

+0

Esto se ajusta mejor a [UnixSE] (http://unix.stackexchange.com/) –

Respuesta

51

Try citando el comodín:

$ find /usr -name \*.sh 

o:

$ find /usr -name '*.sh' 

Si le sucede que tiene un archivo que coincide con * .sh en el directorio de trabajo actual, se ampliará el comodín antes de encontrar lo ve. Si le sucede que tiene un archivo llamado tkConfig.sh en su directorio de trabajo, la encuentran comando se expandiría a:

$ find /usr -name tkConfig.sh 

que sólo podría encontrar archivos tkConfig.sh llamado. Si usted tuviera más de un archivo que coincide con * .sh, se obtendría un error de sintaxis de encontrar:

$ cd /usr/local/lib 
$ find /usr -name *.sh 
find: bad option tkConfig.sh 
find: path-list predicate-list 

Una vez más, la razón es que el comodín se expande a ambos archivos:

$ find /usr -name tclConfig.sh tkConfig.sh 

Citar el comodín impide que se expanda prematuramente.

Otra posibilidad es que/usr o uno de sus subdirectorios sea un enlace simbólico. encontrar normalmente no seguir enlaces, lo que podría tener la opción de -seguir:

$ find /usr -follow -name '*.sh' 
+0

¿Qué sucede si el archivo es un script de shell pero carece de la extensión '.sh'? Tal vez algo como 'find/xyz | archivo xargs | grep shell'? –

+0

¿Con qué frecuencia, sin embargo, los guiones de shell ** no ** tienen una extensión .sh? –

+0

¿Hay alguna manera general de averiguar cuándo/dónde se está expandiendo un comodín? – isaacg

15

En algunos sistemas (Solaris, por ejemplo), no hay ninguna acción por defecto, por lo que necesita para añadir el - comando de impresión

find /usr -name '*.foo' -print 
+1

. He sido criticado por eso en el pasado. Pero debo señalar que en un cuadro moderno de Solaris, la impresión está activada por defecto. De hecho, parece que no puedo encontrar un hallazgo que ya no funcione de esa manera. –

7

Para la búsqueda de archivos en sus discos, magra de usar "localizar" en vez de que es instantánea (mira en un índice diario incorporado) te ejemplo sería:

locate '/usr*.sh' 
+0

Una buena sugerencia. (Tuve que ejecutar updatedb en mi máquina para probar la idea, ya que no la tengo en mi crontab por alguna razón. No tener una base de datos actualizada sería la razón principal para no usar locate). –

+0

Y Hay algunos sistemas que no tienen instalado instalar de manera predeterminada: descubrí que tenía que instalar el paquete 'mlocate' en mi Raspberry Pi, sin olvidar el' sudo updatedb' después para construir los índices ... – SlySven

Cuestiones relacionadas