2011-12-22 14 views
36

Tengo un archivo /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home¿Encontrar todos los archivos con cierta extensión en Unix?

Estoy tratando de encontrar si tengo el * .jdk en cualquier otro lugar en mi disco duro. Así que hago un comando de búsqueda:

find . -name "*.jdk" 

Pero no encuentra nada. Ni siquiera el que sé que tengo. ¿Cómo?

Respuesta

70

find . solo busca en su directorio actual. Si tiene permisos para buscar archivos en otros directorios (acceso root), puede utilizar el siguiente para encontrar su archivo -

find/-type f -name "*.jdk" 

Si está recibiendo toneladas de permiso denegado mensajes entonces usted puede suprimir que al hacer

find/-type f -name "*.jdk" 2> /dev/null 
+3

@Prostak, esto solo mostrará archivos regulares, no directorios. '-type f' es filtrar enlaces simbólicos, directorios, dispositivos, y tal. – BRFennPocock

+0

Estoy marcando esta como respuesta correcta. ¡Pero gracias a los dos por su ayuda! – Prostak

4

Probablemente sus JDK están en mayúsculas y/o la versión de find disponible en OS X no es la predeterminada a -print si no se especifica ninguna acción; Proveedores:

find . -iname "*.jdk" -print 

(-iname es como -name pero realiza una concordancia entre mayúsculas y minúsculas; -print dice a find para imprimir los resultados)

--- --- EDITAR

Como ha señalado @Jaypal, obviamente find . ... solo se ve en el directorio actual (y en los subdirectorios), si desea buscar todo el disco, debe especificar / como ruta de búsqueda.

+1

¿Por qué usted tiene que usar '-print', ISN' t el predeterminado? –

+1

@giannischristofakis: acaba de verificar el estándar POSIX, sí, es el predeterminado; probablemente lo escribí explícitamente porque temía que fuera un GNUismo al que estaba acostumbrado (por ejemplo, en GNU find también puedes omitir el '.', mientras que el IIRC en BSD lo considera necesario). –

2

The '.' estás usando es el directorio actual. Si está comenzando en su directorio de inicio, probablemente perderá los archivos JDK.

peor caso de búsqueda es comenzar desde la raíz

find/-name '*.jdk' -o -name '*.JDK' -print 

De lo contrario sustituir '/' con un poco de trayectoria que esté seguro debe ser el padre de vosotros, los archivos de JDK.

Espero que esto ayude.

8

a/

find . medios, "encontrar (comenzando en el directorio actual)." Si desea buscar en todo el sistema, use find /; el que buscar en /System/Library, utilice find /System/Library, etc.

b/

Es más seguro utilizar comillas simples alrededor de comodines. Si no hay archivos nombrados *.JDK en el directorio de trabajo cuando se ejecuta esto, entonces find obtendrá una línea de comandos de:

find . -name *.jdk 

Sin embargo, si le sucede que tiene archivos junk.jdk y foo.jdk en el directorio actualcuando se ejecuta, find en su lugar se inició con:

find . -name junk.jdk foo.jdk 

... que (ya que hay dos) se confunden, y hacer que fuera error. Si a continuación, eliminar foo.jdk y hace exactamente lo mismo otra vez, tendría

find . -name junk.jdk 

... que nunca se encontrará un archivo llamado (por ejemplo) 1.6.0.jdk.

Lo que es probable que desee en este contexto, es

find /System -name '*.jdk' 

... o, puede "escapar" del * como:

find /System -name \*.jdk 
Cuestiones relacionadas