¿Cómo buscar contenido de varios archivos PDF?


¿Cómo puedo buscar el contenido de archivos PDF en un directorio/subdirectorio? Estoy buscando algunas herramientas de línea de comandos. Parece que grep no puede buscar archivos PDF.

Author: Beryllium, 2011-01-10

12 answers

Su distribución debe proporcionar una utilidad llamada pdftotext:

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

El "-" es necesario para tener salida pdftotext a stdout, no a archivos. Las opciones --with-filename y --label= pondrán el nombre del archivo en la salida de grep. El indicador opcional --color es bueno y le dice a grep que emita usando colores en el terminal.

(En Ubuntu, pdftotext es proporcionado por el paquete xpdf-utils o poppler-utils.)

Este método, usando pdftotext y grep, tiene una ventaja sobre pdfgrep si desea usar características de GNU grep que pdfgrep no soporta. Nota: pdfgrep-1.3.x soporta la opción -C para imprimir la línea de contexto.

 171
Author: sjr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-22 13:51:35

Existe pdfgrep, que hace exactamente lo que su nombre sugiere.

pdfgrep -R 'a pattern to search recursively from path' /some/path

Lo he utilizado para búsquedas simples y funcionó bien.

(Hay paquetes en Debian, Ubuntu y Fedora.)

Desde la versión 1.3.0 pdfgrep soporta búsqueda recursiva. Esta versión está disponible en Ubuntu desde Ubuntu 12.10 (Quantal).

 175
Author: Graeme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-04 15:23:35

Recoll es una fantástica aplicación de búsqueda GUI de texto completo para Unix/Linux que admite docenas de formatos diferentes, incluido PDF. Incluso puede pasar el número de página exacto y el término de búsqueda de una consulta al visor de documentos y, por lo tanto, le permite saltar al resultado directamente desde su interfaz gráfica de usuario.

Recoll también viene con una interfaz de línea de comandos viable y una interfaz de navegador web .

 23
Author: Glutanimate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-25 17:08:06

Mi versión actual de pdfgrep (1.3.0) permite lo siguiente:

pdfgrep -HiR 'pattern' /path

Al hacer pdfgrep --help:

  • H: Imprime el nombre del archivo para cada coincidencia.
  • i: Ignorar las distinciones de casos.
  • R: Buscar directorios recursivamente.

Funciona bien en mi Ubuntu.

 11
Author: arkhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-22 04:40:01

Hice este pequeño script destructivo. Diviértete con él.

function pdfsearch()
{
    find . -iname '*.pdf' | while read filename
    do
        #echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
        pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
        # remove it!  rm -f "$filename."
    done
}
 7
Author: phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 15:01:41

Tuve el mismo problema y, por lo tanto, escribí un script que busca una cadena en todos los archivos pdf de la carpeta especificada e imprime los archivos PDF que coinciden con la cadena de consulta.

Tal vez esto sea útil para usted.

Puede descargarlo aquí

 2
Author: Paul Weibert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-24 14:04:41

Si desea ver los nombres de archivo con pdftotext use el siguiente comando:

find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf" 
 2
Author: Aleksey Kontsevich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-24 17:17:48

Me gusta la respuesta de @sjr sin embargo prefiero xargs vs-exec. Encuentro xargs más versátil. Por ejemplo con-P podemos aprovechar múltiples CPU cuando tiene sentido hacerlo.

find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
 2
Author: Deian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-26 18:13:38

Existe una herramienta grep de recursos comunes de código abierto crgrep que busca dentro de archivos PDF, pero también otros recursos como contenido anidado en archivos, tablas de bases de datos, metadatos de imágenes, dependencias de archivos POM y recursos web, y combinaciones de estos, incluida la búsqueda recursiva.

La descripción completa en la pestaña Archivos cubre prácticamente lo que soporta la herramienta.

Desarrollé crgrep como una herramienta de código abierto.

 1
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-13 22:28:38

Primero convierta todos sus archivos pdf a archivos de texto:

for file in *.pdf;do pdftotext "$file"; done

Luego use grep como de costumbre. Esto es especialmente bueno ya que es rápido cuando tiene múltiples consultas y muchos archivos PDF.

 1
Author: Martin Thoma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-02 22:07:10

Necesita algunas herramientas como pdf2text para convertir primero su pdf en un archivo de texto y luego buscar dentro del texto. (Es probable que se pierda alguna información o símbolos).

Si está utilizando un lenguaje de programación, probablemente haya bibliotecas pdf escritas para este propósito. por ejemplo, http://search.cpan.org/dist/CAM-PDF / para Perl

 0
Author: Nylon Smile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-10 03:43:07

Intente usar 'acroread' en un script simple como el anterior

 -1
Author: acathur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-10 09:09:49