You are on page 1of 8

Encuentra cualquier cosa en Linux con

find
Autor: Sergio Gonzlez D. (sergio.gonzalez.duran@gmail.com)

El comando find de Linux es extremadamente potente, esto es, si logras usarlo adecuadamente. No hay nada mejor para hacer
todo tipo de bsquedas de archivos y carpetas que este comando.

Hay por supuesto otros comandos de bsqueda como awk, sed y grep pero estn ms enfocados a buscar "dentro" de los
archivos. find es mucho ms til para encontrar archivos y directorios. En este artculo aprenders a usarfind como todo un
experto y despus puedas aplicarlo en usos administrativos de todo tipo.

Sintaxis de find
La sintaxis es muy simple:

find [ruta] [expresin_de_bsqueda] [accin]

La [ruta] es cualquier directorio o path que se quiera indicar y desde donde inicia la bsqueda, ejemplos pueden ser "/etc",
"/home/sergio", "/", "." si no se indica una ruta se toma en cuenta entonces el directorio donde se este actualemte, es decir el
directorio de trabajo actual, que es lo mismo que indicar punto ".". De hecho es posible indicar ms de un directorio de bsqueda
como se ver ms adelante en un ejemplo.

La [expresin_de_bsqueda] es una o ms opciones que puede devolver la bsqueda a realizar en si o acciones a realizar sobre
la bsqueda, si no se indica ninguna expresin de bsqueda se aplica por defecto la opcin -print que muestra el resultado de la
bsqueda.

La [accin] es cualquier comando de Linux invocado a ejecutarse sobre cada archivo o directorio encontrado con la
[expresin_de_bsqueda].

Los tres argumentos anterior son enteramente opcionales

Bsquedas bsicas
El siguiente ejemplo busca todos los archivos cuyo nombre sea "reporte" desde la raz:

find / -name reporte


find / -iname Reporte (lo mismo, pero sin tomar en cuenta maysculas y minsculas)

El uso de expresiones regulares en lo que se busca es vlido:

find / -name "[0-9]*" (todo lo que empieze con un dgito)


find / -name "[Mm]*" (todo lo que empieze con un la letra M o m)
find / -name "[a-m]*.txt" (todo lo que empieze entre a y m y termine en ".txt")
Busca bajo /home todos los archivos que pertenezcan al usuario mario

find /home -user mario

(lo mismo y que contengan con "enero" como en reporte_enero2011)


find /home -user mario -name "*enero*"

No ests limitado a un solo directorio, indica ms de uno a buscar antes de las expresiones:

find /etc /usr /var -group admin

(busca en tres directorios todos los archivos o


subdirectorios que pertenezcan al grupo 'admin')

Bsquedas a travs del tiempo


Varias opciones aceptan argumentos numricos, estos pueden ser indicados de tres maneras posibles:

+n busca valores mayor que n


-n busca valores menor que n
n busca exactamente el valor n

Buscar todos los archivos que hayan cambiado en los ltimos 30 minutos:

find / -mmin -30 -type f

los modificados exactamente hace 30 minutos:


find / -mmin 30 -type f

O si deseas buscar en un rango especfico de minutos, con este ejemplo buscaras todos los directorios que hayan cambiado hace
ms de 10 minutos (+10) y menos de 30 (-30)

find / -mmin +10 -mmin -30 -type d

aunque lo anterior sera mas exacto decir los modificados hace 11 minutos o ms
y 29 minutos o menos, ya que como se vio anteriormente +n y -n indican
"mayor que" y "menor que", el ejemplo correcto sera entonces:
find / -mmin +9 -mmin -31 -type d

find ofrece varias opciones de bsqueda por tiempo, pero las principales son: -amin, -atime, -cmin, ctime, -mmin y -mtime. "min"
es para periodos de minutos y "time" para periodos de 24 horas.

Los que empiezan con "a" (access) indica el tiempo en que fue accedido (leido) por ltima vez un archivo. Los que empiezan con
"c" (change) indica el tiempo que cambi por ltima vez el status de un archivo, por ejemplo sus permisos. Los que empiezan con
"m" (modify) indica el tiempo en que fue modificado (escrito) por ltima vez un archivo.
Una consideracin a tener con las bsquedas -atime, -ctime y -mtime es que el tiempo se mide en periodos de 24 horas y estos
son siempre truncados, con ejemplos es ms claro:

find . -mtime 0 (busca archivos modificados entre ahora y hace un dia)


find . -mtime -1 (busca archivos modificados hace menos de un dia)
find . -atime 1 (busca archivos accedidos entre hace 24 y 48 horas)
find . -ctime +1 (busca archivos cuyo status haya cambiado hace ms de 48 horas)

Comparaciones con -and, -or y -not


find tambin incluye operadores booleanos que la hace una herramienta aun ms ltil:

find /home -name 'ventas*' -and -mmin 120


find /home -name 'reporte[_-]*' -not -user sergio
find /home -iname '*enero*' -or -group gerentes

El primer ejemplo busca todos los archivos que comiencen con 'ventas' Y que hayan sido modificados o cambiados en las ltims
dos horas (120 minutos).

El segundo ejemplo busca todos los archivos que comiencen con 'reporte' y despus siga un _ o un - y que NO pertenezcan al
usuario sergio.

El tercer ejemplo busca todos los archivos que contengan la palabra enero, Enero, ENERO, etc. (sin importar si lleva maysculas o
minsculas) O cualquier otro archivo que encuentre que pertenezca al grupo 'gerentes'.

Estas opciones de booleanos tienen su correspondiente abreviatura:


-and se puede indicar tambin como -a
-or se puede indicar tambin como -o
-not se puede indicar tambin como !

El tamao si importa
Una de las actividades bsicas de un administrador de sistemas Linux es monitorear el tamao de archivos, sobre todo de
usuarios. Con find es muy fcil realizar bsquedas por tamao, se indica con la opcin -size, se aplican las mismas reglas para
argumentos nmericos (+n -n n).

find /var/log -size +15000k -name "*.jpg" (busca archivos mayores a 15 megas del tipo jpg)
find $HOME -800c (busca en tu home todos los archivos menores a 800 bytes (799 realmente))

(archivos de tamao comprendidos entre 1mb y 10mb)


find . -size +1000k -and -size -10000k

Se admiten cuatro parmetros despus del nmero en -size:

c = bytes
w = 2 byte words
k = kilobytes
b = 512-byte bloques

Para buscar archivos vacios puedes entonces hacer lo siguiente:

find . -size 0c
(Aunque la opcin -empty hace lo mismo ms eficientemente)
find . -empty

Cualquiera de los ejemplos anteriores dar un aburrido listado de los archivos y sus rutas. Si lo que quieres es realizar una accin
(ejecutar un comando) sobre estos usa entonces la opcin entonces -exec.

A escena -exec, el poder aumenta


-exec permite ejecutar acciones sobre el resultado de cada lnea o archivo devuelto por find, o en otras palabras permite
incorporar comandos externos para ejecutar sobre cada resultado devuelto. Muy interesante. Asi por ejemplo, si queremos buscar
todos los archivos mayores a 3 megas en /var y adems mostrar su salida en formato ls, podemos hacer lo siguiente:

find /var -size +3000k -exec ls -lh {} \;

Despus de ls -lh que nos devuelve una salida formateada de ls se indica la cadena '{}' que se sustituye por cada salida de find.

No hay lmite para lo que se puede lograr, asi por ejemplo, borrar todo lo mayor a un mega en /tmp.

find /tmp -size +1024k -exec rm -f {} \;

Por cierto si usas la versin GNU de find (y creo que todos los que usamos Linux la tenemos, comprubalo con find --version)),
lo anterior tambin funciona directamente con la opcin -delete:

find /tmp -size +3000k -delete (lo mismo que usar -exec con rm)

EJEMPLOS Uso del comando de


encontrar

FEB 3 RD 2014
A la hora de Nombrar comando tiles en Linux Uno de los Primero Que se Vendr a la
mente es el comando encontrar el Cual nos permite buscar archivos / Directorios Bajo Una
serie de Criterios Que Nosotros le argumentemos, ESTO Con La Finalidad De que la
busqueda de mar Posible lo mas exacta. Como las Funcionalidades operacionales Del
Comando Muchsimas hijo de nos remitiremos una ONU USO Bastante sencilla en este
post.
. ENCONTRAR Todos Los Archivos Que terminen en .php

1Miguel@MacBook:$ find . -type f -name *php

./dir1/app.php

2./dir1/calm.php

./dir1/test1.php
3

4./dir2/foo.php

. ENCONTRAR Todos Los Archivos Que No terminen con .php

1
Miguel@MacBook:$ find . -type f ! -name *php

./dir3/caz.html
2

This busqueda Se Puede Realizar tambin con el comando

1
Miguel@MacBook:$ find . -type f -not -name *php

./dir3/caz.html
2

. Es Posible Generar busquedas utilizando Criterios mltiplos, En Este Caso de Vamos a


buscar Todos Los arhivos con nombre "ca *" Pero Que no terminen con .php

1
Miguel@MacBook:$ find . -type f -name "ca*" ! -name *php

./dir3/caz.html
2

tambin, de Podemos Como utilizar el operador "y / o" cuando utilizamos el comando
encontrar y Con Ello Slo Los archivos / Directorios Que Cumplen con los Criterios Listados
Sran.

Miguel@MacBook:$ find . -name '*.php' -o -name '*.txt' -o -name '*.html'


3
./dir1/app.php

./dir1/calm.php
4
./dir1/sun.txt

./dir1/test1.php
5
./dir2/foo.php

./dir3/caz.html
6
./dir3/caz.php

. Busqueda en mltiplos Rutas de forma Conjunta

1Miguel@MacBook:$ find dir1/ dir2/ -name *php

dir1//app.php
2

3dir1//calm.php

dir1//test1.php

4dir2//foo.php

. Encontrando Archivos ocultos

1
Miguel@MacBook:$ find . -name ".*"

./dir3/.hid.php
2

. Encontrando Archivos con ALGN criterio de Permisos. En Este Caso, el criterio de


Permiso Ser 775

Miguel@MacBook:$ find . -type f -perm 0775


2
./dir1/kol.txt

./dir3/.hid.php
3
./dir3/hup.txt

Y Si comprobamos los Permisos, veremos Que Cumplen el criterio

2
Miguel@MacBook:$ ll ./dir1/kol.txt

-rwxrwxr-x 1 Miguel staff 0B Feb 3 16:52 ./dir1/kol.txt


3
Miguel@MacBook:$ ll ./dir3/.hid.php

-rwxrwxr-x 1 Miguel staff 0B Feb 3 16:49 ./dir3/.hid.php


4
Miguel@MacBook:$ ll ./dir3/hup.txt

-rwxrwxr-x 1 Miguel staff 0B Feb 3 16:51 ./dir3/hup.txt


5

. Buscar Por un usuario en particular,

1Miguel@MacBook:$ find dir1/ -user Miguel

dir1/

2dir1//app.php

dir1//calm.php

3dir1//kol.txt

dir1//sun.txt

4dir1//test1.php
5

6
dir1//tool

: Adems del nombre de Podemos Como utilizar ALGN criterio Adicional Como el
nombre, Permiso, tipo, etc.

Miguel@MacBook:$ find dir1/ -user Miguel -type f -name *txt

2dir1//kol.txt

dir1//sun.txt

. Buscar Por un grupo Propietario en particular,

1
Miguel@MacBook:$ find /var/ftp -group admin -type d

/var/ftp/site
2

. ENCONTRAR Todos Los Archivos Modificados en la ltima hora

[root@mail-old ~]$ find /var/log/ -mmin -60


3
/var/log/clamav/clamd.log

/var/log/secure
4
/var/log/wtmp

/var/log/lastlog
5
/var/log/maillog

/var/log/cron
6
/var/log/sa/sa03

. ENCONTRAR Todos Los Archivos up to 50 MG de Tamao

1
[root@mail-old ~]$ find /var/tmp/ -size 50M

/tmp/nohup
2

. Realizar una bsqueda y ejecutar comando de la ONU Sobre ella


1

Miguel@MacBook:$ find . -type f -name *txt -exec ls -l {} \;


2
-rwxrwxr-x 1 Miguel staff 0 Feb 3 16:52 ./dir1/kol.txt

-rw-r--r-- 1 Miguel staff 21 Feb 3 17:21 ./dir1/sun.txt


3
-rwxrwxr-x 1 Miguel staff 0 Feb 3 16:51 ./dir3/hup.txt

Como fue Posible Ver el comando encontrar nn pemirte Realizar busquedas de forma
sencilla e Incluir Bastante Una serie de Criterios Que Nos Ayudan a Que esta Mn mar Ms
Eficaz posible.Todas las Salidas Estas Podemos Complementar con Otros Comandos (ms
o menos, awk, corte, etc.).

You might also like