¿Cómo buscar contenidos de múltiples archivos pdf?
227
¿Cómo podría buscar el contenido de los archivos PDF en un directorio / subdirectorio? Estoy buscando algunas herramientas de línea de comandos. Parece que grepno puede buscar archivos PDF.
El "-" es necesario para tener salida de pdftotext a stdout, no a archivos. Las opciones --with-filenamey --label=colocarán el nombre del archivo en la salida de grep. La --colorbandera opcional es agradable y le dice a grep que salga usando colores en la terminal.
(En Ubuntu, pdftotextes proporcionado por el paquete xpdf-utilso poppler-utils.)
Este método, el uso de pdftotexty grep, tiene una ventaja sobre pdfgrepsi desea utilizar características de GNU grepque pdfgrepno son compatibles. Nota : pdfgrep-1.3.x admite la -Copción para imprimir la línea de contexto.
@Kurt Pfeifle La edición "(Editar por -kp-)" que realizó no funciona, ya que grepfiltra los nombres de los archivos impresos.
Raphael Ahrens
@sjr no, aunque la pdfgrepsolución es buena para búsquedas realmente rápidas y simples, a menudo quiero obtener algo de contexto, ya que una sola línea no será lo suficientemente útil, por lo que agregué a esta respuesta: por ejemplo, puede agregar la opción -C5 antes de "su patrón" para incluir 5 líneas de contexto a la salida - pdfgrep no lo admite
Colin D Bennett
Oh, eso es genial, me alegra saber que hay ventajas en esto a pesar de que es mucho menos obvio para la mayoría de las personas lo que está haciendo
sjr
2
@sjr Solo para el registro: estoy usando Ubuntu 12.10 y pdfgrepes inútil, informa una gran cantidad de basura en los archivos que no puede manejar. Su solución, por otro lado, ayudó. Por lo tanto, no lo elimine, ¡incluso después de 3 años sigue siendo útil!
Ali
Pude usarlo también en cygwin, aunque para que fuera una función con el parámetro tuve que hacer que "your_pattern" se convirtiera en '$ 1'
Koshmaar
215
Hay pdfgrep , que hace exactamente lo que sugiere su nombre.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Lo he usado para búsquedas simples y funcionó bien.
(Hay paquetes en Debian, Ubuntu y Fedora).
Desde la versión 1.3.0, pdfgrep admite la búsqueda recursiva. Esta versión está disponible en Ubuntu desde Ubuntu 12.10 (Quantal).
@pavon pdfgrepahora tiene esa opción de recursión, que incluye -Rtambién seguir enlaces simbólicos
Tobias Kienzler
30
Recoll es una fantástica aplicación de búsqueda de 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 directamente al resultado desde su GUI.
@Glutanimate Sería útil (para mí y posiblemente para otros también) si pudiera agregar un ejemplo relacionado con la pregunta original (herramienta de línea de comandos para la búsqueda de múltiples archivos PDF): también me gustaría ver cómo realizar una búsqueda con comodines y cómo buscar el directorio actual que incluye todos los subdirectorios . ¿Cómo se vería eso recoll / xapianen la línea de comandos (sin GUI)? ¡Gracias!
loco por natty
@ LeszekŻarna ¿Quizás podría publicar el ejemplo que probó?
loco por natty
El recollmanual del usuario podría contener algunas indicaciones, pero ofrece un lugar técnica y "fuera de tema" leer ...
nuez sobre Natty
1
@nutty: recoll -t -q dir: pwdext: pdf 'neuro *' - stackoverflow se comió los backticks alrededor de pwd.
medoc
13
Mi versión real de pdfgrep (1.3.0) permite lo siguiente:
pdfgrep -HiR 'pattern' /path
Al hacer pdfgrep --help:
H: Imprima el nombre del archivo para cada coincidencia.
+1. Pero en lugar de $filename.eso, debes colocarlo grep.
Raphael Ahrens
3
Me gusta la respuesta de @ sjr, sin embargo, prefiero xargs vs -exec. Me parece que los xargs son más versátiles. Por ejemplo, con -P podemos aprovechar múltiples CPU cuando tenga sentido hacerlo.
punto interesante sobre xargsla capacidad de procesamiento en paralelo. Tenga en cuenta que su --labelargumento de opción será literal{} , porque el grepcomando ya no se ejecuta en el contexto de find's exec.
mklement0
2
Tuve el mismo problema y, por lo tanto, escribí un script que busca una cadena en todos los archivos pdf en la carpeta especificada e imprime los archivos PDF que coinciden con la cadena de consulta.
tal vez útil para poner el guión en el comentario?
baxx
probé su script y resultó mucho más lento que la pdfgrepsolución o la línea única de sjr, y me dejó con un proceso continuo que usa el 100% de un hilo de la CPU incluso después de presionar Ctrl-C para terminarlo.
Jason
2
Si desea ver los nombres de archivo con pdftotext, use el siguiente comando:
Hay un recurso común de herramientas de código abierto grep crgrep el que las búsquedas dentro de los archivos PDF, sino también otros recursos como el contenido de anidar en los archivos de bases de datos, tablas, imagen meta-datos, dependencias de archivo POM y recursos web - y las combinaciones de éstos incluyendo la búsqueda recursiva.
La descripción completa en la pestaña Archivos cubre más o menos lo que la herramienta admite.
Desarrollé crgrep como una herramienta de código abierto.
Craig, ¿tienes alguna conexión con ese proyecto? Si es así, debe indicarlo en su respuesta. Digo esto porque acabas de publicar una respuesta prácticamente idéntica a otras dos preguntas antiguas ...
Stephen C
Publicación actualizada para aclarar que soy el autor de crgrep
Craig
1
Primero convierta todos sus archivos pdf a archivos de texto:
for file in *.pdf;do pdftotext "$file"; done
Luego utilícelo grepcomo de costumbre. Esto es especialmente bueno, ya que es rápido cuando tiene múltiples consultas y muchos archivos PDF.
Esto, cuando se hace en combinación con aggithub.com/ggreer/the_silver_searcher . Capaz de analizar en psicodeliks Gb por microsegundos. Archivos planos para toda la vida
NVRM
0
Necesita algunas herramientas como pdf2text para convertir primero su pdf a un archivo de texto y luego buscar dentro del texto. (Probablemente perderá 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
Respuestas:
Su distribución debe proporcionar una utilidad llamada
pdftotext
:El "-" es necesario para tener salida de pdftotext a stdout, no a archivos. Las opciones
--with-filename
y--label=
colocarán el nombre del archivo en la salida de grep. La--color
bandera opcional es agradable y le dice a grep que salga usando colores en la terminal.(En Ubuntu,
pdftotext
es proporcionado por el paquetexpdf-utils
opoppler-utils
.)Este método, el uso de
pdftotext
ygrep
, tiene una ventaja sobrepdfgrep
si desea utilizar características de GNUgrep
quepdfgrep
no son compatibles. Nota : pdfgrep-1.3.x admite la-C
opción para imprimir la línea de contexto.fuente
grep
filtra los nombres de los archivos impresos.pdfgrep
solución es buena para búsquedas realmente rápidas y simples, a menudo quiero obtener algo de contexto, ya que una sola línea no será lo suficientemente útil, por lo que agregué a esta respuesta: por ejemplo, puede agregar la opción -C5 antes de "su patrón" para incluir 5 líneas de contexto a la salida - pdfgrep no lo admitepdfgrep
es inútil, informa una gran cantidad de basura en los archivos que no puede manejar. Su solución, por otro lado, ayudó. Por lo tanto, no lo elimine, ¡incluso después de 3 años sigue siendo útil!Hay pdfgrep , que hace exactamente lo que sugiere su nombre.
Lo he usado para búsquedas simples y funcionó bien.
(Hay paquetes en Debian, Ubuntu y Fedora).
Desde la versión 1.3.0, pdfgrep admite la búsqueda recursiva. Esta versión está disponible en Ubuntu desde Ubuntu 12.10 (Quantal).
fuente
pdfgrep
ahora tiene esa opción de recursión, que incluye-R
también seguir enlaces simbólicosRecoll es una fantástica aplicación de búsqueda de 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 directamente al resultado desde su GUI.
Recoll también viene con una interfaz de línea de comandos viable y una interfaz de navegador web .
fuente
recoll / xapian
en la línea de comandos (sin GUI)? ¡Gracias!recoll
manual del usuario podría contener algunas indicaciones, pero ofrece un lugar técnica y "fuera de tema" leer ...pwd
ext: pdf 'neuro *' - stackoverflow se comió los backticks alrededor de pwd.Mi versión real de pdfgrep (1.3.0) permite lo siguiente:
Al hacer
pdfgrep --help
:Funciona bien en mi Ubuntu.
fuente
Hice este pequeño guión destructivo . Diviértete con eso.
fuente
$filename.
eso, debes colocarlogrep
.Me gusta la respuesta de @ sjr, sin embargo, prefiero xargs vs -exec. Me parece que los xargs son más versátiles. Por ejemplo, con -P podemos aprovechar múltiples CPU cuando tenga sentido hacerlo.
fuente
xargs
la capacidad de procesamiento en paralelo. Tenga en cuenta que su--label
argumento de opción será literal{}
, porque elgrep
comando ya no se ejecuta en el contexto defind
'sexec
.Tuve el mismo problema y, por lo tanto, escribí un script que busca una cadena en todos los archivos pdf en la carpeta especificada e imprime los archivos PDF que coinciden con la cadena de consulta.
Tal vez esto te sea útil.
Puedes descargarlo aquí
fuente
pdfgrep
solución o la línea única de sjr, y me dejó con un proceso continuo que usa el 100% de un hilo de la CPU incluso después de presionar Ctrl-C para terminarlo.Si desea ver los nombres de archivo con pdftotext, use el siguiente comando:
fuente
Hay otra utilidad llamada ripgrep-all , que se basa en ripgrep .
Puede manejar más que solo documentos PDF, como documentos de Office y películas, y el autor afirma que es más rápido que
pdfgrep
.Sintaxis del comando para buscar de forma recursiva el directorio actual, y el segundo se limita a los archivos PDF solamente:
fuente
Hay un recurso común de herramientas de código abierto grep crgrep el que las búsquedas dentro de los archivos PDF, sino también otros recursos como el contenido de anidar en los archivos de bases de datos, tablas, imagen meta-datos, dependencias de archivo POM y recursos web - y las combinaciones de éstos incluyendo la búsqueda recursiva.
La descripción completa en la pestaña Archivos cubre más o menos lo que la herramienta admite.
Desarrollé crgrep como una herramienta de código abierto.
fuente
Primero convierta todos sus archivos pdf a archivos de texto:
Luego utilícelo
grep
como de costumbre. Esto es especialmente bueno, ya que es rápido cuando tiene múltiples consultas y muchos archivos PDF.fuente
ag
github.com/ggreer/the_silver_searcher . Capaz de analizar en psicodeliks Gb por microsegundos. Archivos planos para toda la vidaNecesita algunas herramientas como pdf2text para convertir primero su pdf a un archivo de texto y luego buscar dentro del texto. (Probablemente perderá 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
fuente
intente usar 'acroread' en un script simple como el anterior
fuente