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