linux - texto - pdfgrep
¿Cómo buscar contenidos de múltiples archivos pdf? (12)
¿Cómo puedo buscar el contenido de los archivos PDF en un directorio / subdirectorio? Estoy buscando algunas herramientas de línea de comandos. Parece que grep
no puede buscar archivos PDF.
Existe una herramienta grep de recursos comunes de código abierto que busca en 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 todo lo que admite la herramienta.
Desarrollé crgrep como una herramienta de código abierto.
Hay pdfgrep , que hace exactamente lo que su nombre sugiere.
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 soporta búsqueda recursiva. Esta versión está disponible en Ubuntu desde Ubuntu 12.10 (Quantal).
Hice este pequeño script destructivo . Diviértete con eso.
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
}
Me gusta la respuesta de @ sjr, sin embargo, prefiero xargs vs -exec. Encuentro xargs más versátil. Por ejemplo, con -P podemos aprovechar varias CPU cuando sea conveniente hacerlo.
find . -name ''*.pdf'' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
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 distinciones de casos.
- R: Buscar directorios recursivamente.
Funciona bien en mi Ubuntu.
Necesita algunas herramientas como pdf2text para convertir primero su pdf en un archivo de texto y luego buscar dentro del texto. (Probablemente te perderás 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
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 varias consultas y muchos archivos PDF.
Si desea ver los nombres de archivos con pdftotext use el siguiente comando:
find . -name ''*.pdf'' -exec echo {} /; -exec pdftotext {} - /; | grep "pattern/|pdf"
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 de 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 agradable 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, utilizando pdftotext
y grep
, tiene una ventaja sobre pdfgrep
si desea usar las características de GNU grep
que pdfgrep
no admite. Nota : pdfgrep-1.3.x admite la opción -C
para imprimir la línea de contexto.
Tuve el mismo problema y, por lo tanto, escribí una secuencia de comandos que busca en todos los archivos pdf en la carpeta especificada una cadena e imprime los archivos PDF que coinciden con la cadena de consulta.
Tal vez esto te sea útil.
Puedes descargarlo here
intente usar ''acroread'' en un script simple como el de arriba
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 GUI.
Recoll también viene con una interfaz de línea de comandos viable y una interfaz de navegador web .