Ejemplos comando find

De ChuWiki

El comando find nos permite buscar ficheros que cumplan determinadas características en un árbol de directorios. La sintaxis básica es

$ find <directorio_de_busqueda> <expresion>

Es muy útil para concatenar este resultado con otros comandos. Por ejemplo, si queremos compilar todos los fuentes java de un directorio hacia abajo, podemos usar el comando así

$ javac `find directorioFuentes -name *.java`

Atención a la comilla, que es importante cual se usa.


Algunos ejemplos[editar]

Listado de todos los ficheros recursivamente de un directorio hacia abajo

$ find .

Listado de ficheros que cumplan determinada expresión regular. Se puede hacer con la opción -name

$ find . -name *.java     #listado de los *.java
$ find . -name *.[ch]     #listado de los *.c y *.h

Si en el directorio actual hubiese algún fichero *.java, la expresión *.java se "expande" antes de ejecutar el comando, por lo que no daría el resultado esperado. Para evitarlo, se puede entrecomillar

$ ls
fichero.java
$ find . -name *.java   #*.java es expande a fichero.java antes de ejecutarse el find
fichero.java
$ find . -name "*.java" #así no se expande
fichero.java
path/otro.java

Listado de todos los fuentes .cpp y .h de un directorio hacia abajo. La opción -o hace de "OR" entre las expresiones -name *.h y -name *.cpp

$ find . -name *.h -o -name *.cpp

Listado de ficheros modificados en las últimas 24 horas

$ find . -mtime 0

Listado de fichero modificados entre hace 24 y 48 horas

$ find . -mtime 1

Listado de ficheros modificados en menos de 48 horas

$ find . -mtime -1

Listado de ficheros modificados hace más de 48 horas

$ find . -name +1

Otro uso habitual es con xargs para lanzar un comando sobre cada resultado. Ejemplo: compilar todos los .java en una carpeta

  $ find . -name *.java | xargs javac

de modo que lanzaría un javac sobre cada línea que devuelva el find