Buscar archivos y carpetas en Linux

Niraj Menon 30 enero 2023
  1. Usos básicos del comando Buscar en Bash
  2. Usos avanzados del comando find en Bash
Buscar archivos y carpetas en Linux

¿Qué hace cuando está en la línea de comando de Bash y necesita encontrar un tipo específico de archivo o una carpeta que comience con un nombre determinado en una ubicación específica? El comando find puede ayudarlo a ubicar archivos y carpetas que pueden ajustarse a un amplio conjunto de criterios y, como resultado, es una poderosa utilidad de línea de comandos en Linux.

Este tutorial explicará el uso del comando find en un contexto de shell de Bash, repasando el uso básico, los casos de uso avanzados y el uso combinado con otras funciones de shell de Bash.

Usos básicos del comando Buscar en Bash

Un comando find es una herramienta versátil que se utiliza para encontrar cualquier cosa, desde un archivo simple hasta varios archivos y carpetas que satisfacen las expresiones REGulares. El caso de uso más simple, para encontrar un archivo o carpeta específico solo en el directorio actual, se puede lograr de la siguiente manera.

find filename.ext
find foldername

Después de ejecutar el comando correspondiente, sus nombres se imprimirán si el archivo o carpeta existe.

El comando find también puede buscar a través del directorio, ingresando subdirectorios para encontrar el archivo o carpeta especificado. Supongamos que tenemos muchos archivos llamados test dispersos en carpetas en nuestro directorio actual.

Para ver dónde se encuentran, podemos teclear lo siguiente.

find . -name test -type f

El código debe devolver las rutas a todos los archivos llamados test en el directorio y subdirectorios actuales. El uso del parámetro -type f asegura que no capturamos directorios también llamados test; si es programador, seguramente tendrá muchos de estos.

El parámetro -name se explica por sí mismo, pero si desea que no se distingan entre mayúsculas y minúsculas mientras busca el nombre especificado para capturar nombres como tEST, Test o TeST, podemos usar el parámetro -iname en su lugar, donde i por insensible.

Bash globs no está estrictamente relacionado con el uso del comando find. Puede usar un asterisco colocado en su patrón en los casos en que no sepa qué caracteres o cuántos de ellos existen en su patrón.

Por ejemplo, si desea capturar los siguientes archivos: test, test2, test_3, testt1, podría usar un glob para capturar estas frases basándose en el hecho de que todas comienzan con la palabra test.

El siguiente comando hace esto.

find . -name test*

El código debe devolver cualquier archivo o directorio (nótese la eliminación del parámetro -type f) que comience con la palabra test.

Usos avanzados del comando find en Bash

Los comandos find se pueden ampliar para que coincidan con varios criterios. Si desea capturar archivos basados ​​en múltiples globs o nombres, puede considerar usar la función -o o OR.

Por ejemplo, si desea encontrar archivos PDF y Word DOC/DOCX en un directorio, puede hacerlo con lo siguiente.

find -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx'

Los parámetros de nombre insensibles para capturar archivos cuya extensión se ha establecido en mayúsculas pueden ser el caso de ciertos programas.

Si está más familiarizado con RegEx, también puede usar un patrón para especificar múltiples criterios, usando los parámetros -regex o -iregex.

Para capturar las mismas extensiones que arriba y, además, buscar archivos que comiencen con prueba, podemos usar el siguiente patrón:

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f

El uso de barras invertidas para caracteres Regex especiales como paréntesis y el símbolo de canalización evita que Bash los procese y pasa la cadena completa directamente al comando find para evitar que nuestro RegEx falle.

Finalmente, un poco de discusión sobre cómo usar la salida del comando find: puede contar cuántas apariciones de los archivos y carpetas coincidentes hay conectando wc, que es una utilidad de conteo de caracteres/palabras/líneas.

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f | wc -l

Puede guardar los datos en una variable para que un comando los analice más adelante en su secuencia de comandos.

DOCS=$(find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f)

Tenga en cuenta que los caracteres especiales, incluidos los espacios, las nuevas líneas y los paréntesis, pueden existir en las rutas de los archivos, lo que genera un comportamiento extraño al pasar una variable de este tipo a un comando. Asegúrese de establecer el delimitador IFS en consecuencia mientras procesa dichos datos.

El comando find también proporciona una ejecución de comandos por elemento similar a la operación xargs. Puede lograr esto usando el parámetro -exec.

Si desea obtener los permisos para todos los archivos y carpetas que coincida, por ejemplo, puede hacerlo de la siguiente manera:

find -regex '.*/test*.\(pdf\|doc\|docx\)' -type f -exec ls -l {} \;

Artículo relacionado - Bash File

Artículo relacionado - Bash Directory