¿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 grep
no puede buscar archivos PDF.
¿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 grep
no puede buscar archivos PDF.
Respuestas:
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=
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 paquete xpdf-utils
o poppler-utils
.)
Este método, el uso de pdftotext
y grep
, tiene una ventaja sobre pdfgrep
si desea utilizar características de GNU grep
que pdfgrep
no son compatibles. Nota : pdfgrep-1.3.x admite la -C
opción para imprimir la línea de contexto.
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 admite
pdfgrep
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.
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).
pdfgrep
ahora tiene esa opción de recursión, que incluye -R
también seguir enlaces simbólicos
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.
Recoll también viene con una interfaz de línea de comandos viable y una interfaz de navegador web .
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.
Hice este pequeño guión 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
}
$filename.
eso, debes colocarlo grep
.
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.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
la capacidad de procesamiento en paralelo. Tenga en cuenta que su --label
argumento de opción será literal {}
, porque el grep
comando ya no se ejecuta en el contexto de find
's exec
.
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í
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:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
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:
rga 'pattern' .
rga --type pdf 'pattern' .
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.
Primero convierta todos sus archivos pdf a archivos de texto:
for file in *.pdf;do pdftotext "$file"; done
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.
ag
github.com/ggreer/the_silver_searcher . Capaz de analizar en psicodeliks Gb por microsegundos. Archivos planos para toda la vida
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