Avisar de contenido inadecuado

Buscando archivos en linux (find)

{
}

La instrucción find tiene dos partes.

    find [camino...] [expresión]

Camino es la ruta o rutas a partir de la cual empezara las búsquedas, puede ser una o más de una.

    find ./PDF/ ./xarxa/ -iname "*.pdf"

Todos los pdf que hay en los directorios PDF y xarxa.

La parte de expresión empezara en el momento en que se encuentre uno de estos caracteres

    “-” “(“ “)” “,” “!”

La mejor manera de entenderlo son con ejemplos

Búsqueda de un archivo.

    find . -name “*.txt”

Nos devolverá todos los archivos con extensión txt que haya en el directorio y recursivamente en todos sus subdirectorios.

El comando find distingue entre mayúsculas y minúsculas, así la instrucción anterior no nos devolverá los ficheros que acaben en TXT. Para que no distinga entre mayúsculas y minúsculas tenemos la opción -iname.

    find . -iname “*.txt”

Podemos ejecutar ordenes que afectaran a los ficheros encontrados.

	find . -name "*.bak" -exec rm {} \;

Esta instrucción borraría todos los ficheros acabados en .bak, esto lo hace a través de la opción -exec acompañada de la instrucción a ejecutar, los corchetes {} se refieren a los ficheros que la instrucción find ha encontrado y la barra invertida \; indica el final de la instrucción.

    find . -type d -exec ls {} \;

Otro ejemplo de este uso, lista el contenido de todos los directorios y subdirectorios de la ruta actual.

    find ~/confidencial/* -type f -exec md5 {} >> MD5 \;

Nos busca todos los ficheros del directorio indicado “~/confidencial/*” y a cada uno le aplica la instrucción md5, guardando el resultado en un archivo llamado MD5.

También podemos hacer búsquedas condicionadas.

    find . ! -iname “*.pdf” ! -name “*.jpg”

Que nos devuelve todos los archivos menos los acabados en .pdf o .jpg.

    find . ! -iname “*a*” -iname “*.jpg”

Nos devolvería todos los jpg que no tengan en su nombre la letra “a”.

Find, por defecto omite los enlaces (links), si queremos que la búsqueda siga los enlaces tendremos que añadir la opción -follow.

    find . -follow -name “*empresa*”

Tenemos que tener en cuenta que podemos caer en una especie de bucle, en el que los links nos hagan volver a pasar por un mismo directorio por el que ya hemos pasado.

Una opción que nos puede ayudar a evitar eso, es -maxdepth n, la que indicamos el número máximo de niveles a los que queremos que find llegue.

    find .-follow -maxdepth 5 -name “*empresa*”

Las comparaciones numéricas se especifican como.

  • +n...............mayor que n

  • -n...............menor que n

  • n...............exactamente n

veámoslo.

ficheros a los que se ha accedido por última vez en los últimos 10 minutos.

    find . -amin -10

ficheros a los que se accedido, por última vez, hace un año exactamente.

    find . -atime 365

ficheros de tamaño superior a 1000 kb

    find . -size +1000k

ficheros vacios.

    find . -empty

    find . -empty -type f

También podemos buscar por tipos.

buscar ficheros

    find . -type f

buscar directorios

    find . -type d

buscar enlaces simbólicos.

    find . -type l

O también por los permisos que tengan concedidos o grupo al que pertenezcan.

buscar ficheros del grupo admin

    find . -group admin

ficheros del usuario pepe

    find . -user pepe

ficheros que no pertenezcan a ningún grupo o ningún usuario.

    find . -nogroup

    find . -nouser

ficheros que tengan todos los permisos concedidos para todos

    find . -perm 777

Sobre los resultados de find se pueden ejecutar ciertas acciones, esto se hace indicándolo con -exec orden. la cadena {} se reemplazará por el nombre del fichero que se esta procesando.

    find . -iname "*.html" -exec cat {} \;

Si substituimos -exec por -ok orden, tendrá el mismo efecto pero esta vez nos pedirá confirmación antes de ejecutar la orden.

    find . -iname "*.html" -ok cat {} \;

Todas las expresiones que aquí se han mostrado y muchas más que hay disponibles (consultar man find), se pueden combinar entre ellas.

se han de cumplir las dos expresiones (and implícito)

    expr1 expr2

Solo se ha de cumplir una de ellas

    expr1 -or expr2

Si no se cumple la expr1

    ! expr1

si no se cumple la expr1 y se cumple expr2

    ! expr1 expr2

Copia todas las imágenes jpg o png del directorio Imágenes al directorio dibuix.

    find ./Imágenes/* -iname "*.jpg" -or -iname "*.png" -exec cp {} tmp/dibuix \;

Ponemos en minúsculas todas las letras de los ficheros.

	find -type f -exec rename 'tr/A-Z/a-z/' "{}" \;

Por último, este comando muchas veces nos devuelve una cantidad de errores que en la mayoría de los casos nos impiden poder ver los resultados. Para evitarlos lo que se hace es redireccionarlos hacia la papelera del sistema.

Si queremos buscar un fichero en todo el ordenador, haremos lo siguiente.

    find / -iname nom_fichero

Esto nos devolvería una cantidad de avisos de permiso denegado, la forma de evitarlo es la siguiente.

    find / -iname nom_fichero 2>/dev/null

Los errores (2) los redireccionamos (>) al vacío (/dev/null)

Bueno, las posibilidades son múltiples, solo tenéis que echarle un poco de imaginación.

{
}
{
}

Comentarios Buscando archivos en linux (find)

Alberto es uno de mis mejores amigos jeje... Y creeme, si existen todavía ese tipo de hombres, mi papá es uno de ellos!
Excelente!!! la cocatenacion de comandos!! me sirvió para buscar y mover todos los archivos que había recuperado a un directorio especifico...
Que poder el de la consola!!!!
Gracias!!!
javier javier 30/06/2013 a las 03:42
Gracias!!!!!
carlos carlos 25/08/2013 a las 16:43
Post guardado a favoritos, muy útil.
Aquí más ejemplos que he encontrado sobre find:
http://www.sysadmit.com/2015/12/linux-buscar-ficheros-directorios-con-find.html
JuanAntonio JuanAntonio 09/12/2015 a las 16:05
de suma ayuda..........
esta muy completo.
FC FC 04/07/2016 a las 21:08

Deja tu comentario Buscando archivos en linux (find)

Identifícate en OboLog, o crea tu blog gratis si aún no estás registrado.

Avatar Tu nombre