Cómo buscar en varios archivos PDF de forma simultánea con pdfgrep

En Software por

Hoy os vamos a hablar de una aplicación gratuita y de código abierto para sistemas Linux que nos permite buscar en varios archivos PDF de forma simultánea. El programa usado se llama pdfgrep y nos permite localizar palabras, frases o cadenas de texto en archivos PDF directamente desde la consola.

Cómo buscar en varios archivos PDF de forma simultánea con pdfgrep

Para resumir su funcionamiento, es como el clásico grep pero diseñado para trabajar con archivos PDF. Es una herramienta muy útil ya que los PDF no son archivos en texto plano y realizar búsquedas nos obliga a usar herramientas como esta.

¿Cómo instalar pdfgrep?

El proceso de instalación es muy sencillo, ya que la aplicación está disponible en la mayoría de repositorios oficiales de las diferentes distribuciones Linux (Debian, Fedora, Ubuntu, openSUSE, Arch Linux, Gentoo, FreeBSD, etc).

También se puede compilar desde el código fuente, pero en nuestro vamos a realizar una instalación desde Ubuntu con el comando:
sudo apt-get install pdfgrep

Aunque también es cierto que en los repositorios de Ubuntu encontramos una versión algo antigua, la 1.4.1 y si echamos un vistazo en la página oficial del proyecto, vemos que ya van por la versión 2.0.1. Pasaros por la página oficial porque también hay instrucciones detalladas para compilar pdfgrep por si queréis tener la última versión.

Cómo buscar en varios archivos PDF de forma simultánea con pdfgrep.

El comando de uso más básico de pdfgrep es:
pdfgrep <palabra> <archivo.pdf>

Con el comando anterior buscaremos la «palabra» que definamos dentro del «archivo.pdf» especificado. De haber alguna ocurrencia se nos mostrará en pantalla.

comando básico pdfgrep

Pero lo realmente interesante es que la búsqueda la realice en varios documentos PDF de forma simultánea, para esto ejecutamos el comando:
pdfgrep <palabra> *.pdf

Por ejemplo, cuando ejecuto el comando pdfgrep computer *.pdf, buscaría la palabra «computer» en todos los archivos de la carpeta actual.

Pero todavía podemos ir más lejos y realizar una búsqueda recursiva en el directorio actual y en sus subdirectorios. Para realizar la búsqueda recursiva se emplea la opción -r acompañada de las opciones --include para incluir coincidencias o --exclude para excluir coincidencias. Esto lo vais a entender mejor con los siguientes ejemplos:

  • Buscar de forma recursiva en todos los archivos PDF: pdfgrep -r --include "*.pdf" <palabra>
  • Buscar de forma recursiva en todos los archivos PDF, pero excluyendo aquellos cuyo nombre empiece por «factura»: pdfgrep -r --exclude "factura*.pdf" <palabra>

Ahondando un poco más en las diferentes opciones de pdfgrep.

Es ahora donde entran en juego algunas de las opciones de pdfgrep, como la opción -i que fuerza a que la búsqueda no diferencie entre mayúsculas y minúsculas. Otra opción interesante es -n, que nos muestra el número de página donde se encontró la palabra o cadena de texto.

Por ejemplo, podemos combinar las opciones anteriores y ejecutar el siguiente comando:
pdfgrep -in -r --include "*.pdf" computer

búsqueda recursiva en archivos PDF con pdfgrep

Para consultar todas las opciones disponibles recomiendo leer detenidamente la ayuda del programa ejecutando el comando pdfgrep --help o man pdfgrep. También podéis consultar la página documentación oficial online si os resulta más cómodo.

zeokat@ubuntu:~$ pdfgrep --help
Usage: pdfgrep [OPTION]... PATTERN FILE...

Search for PATTERN in each FILE.
PATTERN is, by default, an extended regular expression.

Options:
 -i, --ignore-case              Ignore case distinctions
 -P, --pcre                     Use Perl compatible regular expressions (PCRE)
 -H, --with-filename            Print the file name for each match
 -h, --no-filename              Suppress the prefixing of file name on output
 -n, --page-number              Print page number with output lines
 -c, --count                    Print only a count of matches per file
 -C, --context NUM              Print at most NUM chars of context
     --color WHEN               Use colors for highlighting;
                                WHEN can be `always', `never' or `auto'
 -p, --page-count               Print only a count of matches per page
 -m, --max-count NUM            Stop reading after NUM matching lines (per file)
 -q, --quiet                    Suppress normal output
 -r, --recursive                Search directories recursively
 -R, --dereference-recursive    Likewise, but follow all symlinks
     --help                     Print this help
 -V, --version                  Show version information