Buscar archivos y directorios en Linux con el comando buscar | Opensource.com
Independientemente de lo organizado que decida ser, parece que siempre hay momentos en los que simplemente no puedo localizar un archivo. A veces es porque no puedo recordar el nombre del archivo en primer lugar. Otras veces, conozco el nombre, pero no puedo recordar dónde decidí guardarlo. Incluso hay ocasiones en las que necesito un archivo que no creé en primer lugar. Sin embargo, no importa cuál sea el dilema, sé que en un sistema POSIX, siempre tengo el comando find
.
Instalación de find
El comando find
está definido por la especificación POSIX, que crea el estándar abierto por el que se miden los sistemas POSIX (incluidos Linux, BSD y macOS). En pocas palabras, ya tiene find
instalado siempre que ejecute Linux, BSD o macOS.
Sin embargo, no todos los comandos find
son exactamente iguales. El comando GNU find
, por ejemplo, tiene características que el comando BSD, Busybox o Solaris find
podría no tener o tiene, pero que implementa de manera diferente. Este artículo utiliza GNU find
del paquete findutils porque está fácilmente disponible y es bastante popular. La mayoría de los comandos mostrados en este artículo funcionan con otras implementaciones de find
, pero si prueba un comando en una plataforma que no sea Linux y obtiene resultados inesperados, intente descargar e instalar la versión GNU.
Buscar un archivo por nombre
Puede localizar un archivo por su nombre de archivo proporcionando el nombre de archivo completo o partes del nombre de archivo utilizando expresiones regulares. El comando find
requiere la ruta al directorio en el que desea buscar, opciones para especificar el atributo que está buscando (por ejemplo, –name
para un nombre de archivo que distingue entre mayúsculas y minúsculas) y, a continuación, la cadena de búsqueda. De forma predeterminada, la cadena de búsqueda se trata literalmente: El comando find
busca un nombre de archivo que sea exactamente la cadena que introduzca entre comillas a menos que utilice sintaxis de expresión regular.
Asuma que su directorio de documentos contiene cuatro archivos: Foo
, foo
, foobar.txt
, y foo.xml
. Aquí hay una búsqueda literal de un archivo con el nombre”foo”:
$ find ~ -name "foo"
/home/tux/Documents/examples/foo
Puede ampliar su búsqueda haciéndola insensible a mayúsculas y minúsculas con la opción -iname
:
$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Comodines
Puede usar caracteres comodines básicos de shell para ampliar su búsqueda. Por ejemplo, el asterisco (*
) representa cualquier número de caracteres:
$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Un signo de interrogación (?
) representa un solo carácter:
$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Esta no es una sintaxis de expresión regular, por lo que el punto (.
) representa un punto literal en este ejemplo.
Expresiones regulares
También puede usar expresiones regulares. Al igual que con -iname
y -name
, hay una opción que distingue entre mayúsculas y minúsculas y una que no distingue entre mayúsculas y minúsculas. Sin embargo, a diferencia de las opciones -name
y -iname
, se aplica una búsqueda -regex
y -iregex
a toda la ruta, no solo al nombre del archivo. Eso significa que si buscas foo
, no obtienes resultados porque foo
no coincide con /home/tux/Documents/foo
. En su lugar, debe buscar la ruta completa o bien usar una secuencia comodín al principio de la cadena:
$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Buscar un archivo modificado en la última semana
Para encontrar un archivo modificado por última vez la semana pasada, utilice la opción -mtime
junto con un número (negativo) de días pasados:
$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Buscar un archivo modificado en un intervalo de días
Puede combinar las opciones -mtime
para localizar un archivo en un intervalo de días. Para el primer argumento -mtime
, proporcione el número de días más reciente que podría haber modificado el archivo, y para el segundo, proporcione el mayor número de días. Por ejemplo, esta búsqueda busca archivos con tiempos de modificación de más de un día en el pasado, pero no más de siete:
$ find ~ -mtime +1 -mtime -7
Limitar una búsqueda por tipo de archivo
Es común optimizar los resultados de find
especificando el tipo de archivo que está buscando. No debe usar esta opción si no está seguro de lo que está buscando, pero si sabe que está buscando un archivo y no un directorio, o un directorio pero no un archivo, entonces este puede ser un gran filtro para usar. La opción es -type
, y sus argumentos son un código de letras que representa unos pocos tipos diferentes de datos. Los más comunes son:
-
d
– directorio -
f
– archivo -
l
– enlace simbólico -
s
– socket -
p
– tubería con nombre (utilizada para FIFO) -
b
– bloque especial (generalmente una designación de disco duro)
Estos son algunos ejemplos:
$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1
Ajustar alcance
El comando find
es recursivo de forma predeterminada, lo que significa que busca resultados en los directorios de directorios contenidos en directorios (y así sucesivamente). Esto puede ser abrumador en un sistema de archivos grande, pero puede usar la opción -maxdepth
para controlar la profundidad de la estructura de carpetas que desea que descienda find
:
$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15
Puede establecer alternativamente la profundidad mínima de recursión con -mindepth
:
$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255
Descargar la hoja de trucos
Este artículo solo cubre las funciones básicas de find
. Es una gran herramienta para buscar a través de su sistema, pero también es un front-end muy útil para el poderoso comando paralelo. Hay muchas razones para aprender find
, así que descargue nuestra hoja de trucos gratuita find
para obtener más información sobre el comando.
Leave a Reply