Comment rechercher le contenu de plusieurs fichiers PDF?
227
Comment puis-je rechercher le contenu de fichiers PDF dans un répertoire / sous-répertoire? Je recherche des outils en ligne de commande. Il semble que grepvous ne puissiez pas rechercher de fichiers PDF.
Le "-" est nécessaire pour que la sortie de pdftotext soit vers stdout, pas vers les fichiers. Les options --with-filenameet --label=mettront le nom du fichier dans la sortie de grep. Le --colordrapeau optionnel est agréable et indique à grep de sortir en utilisant des couleurs sur le terminal.
(Dans Ubuntu, pdftotextest fourni par le package xpdf-utilsou poppler-utils.)
Cette méthode, utilisant pdftotextet grep, a un avantage sur pdfgrepsi vous voulez utiliser des fonctionnalités de GNU grepqui pdfgrepne prennent pas en charge. Remarque : pdfgrep-1.3.x prend en charge l' -Coption d'impression de la ligne de contexte.
@Kurt Pfeifle L'édition "(Edit by -kp-)" que vous avez effectuée ne fonctionne pas car grepfiltre les noms des fichiers imprimés.
Raphael Ahrens
@sjr no, bien que la pdfgrepsolution soit bonne pour des recherches très rapides et simples, souvent je veux obtenir un peu de contexte, car une seule ligne ne sera pas assez utile - donc comme j'ai ajouté à cette réponse: Par exemple, vous pouvez ajouter l'option -C5 avant "votre modèle" pour inclure 5 lignes de contexte à la sortie - pdfgrep ne prend pas en charge cela
Colin D Bennett
oh c'est cool, heureux de savoir qu'il y a des avantages à cela même si c'est beaucoup moins évident pour la plupart des gens que ça fait
sjr
2
@sjr Juste pour mémoire: j'utilise Ubuntu 12.10 et pdfgrepest inutile, il signale une énorme quantité de déchets sur les fichiers qu'il ne peut pas gérer. Votre solution a en revanche aidé. Alors, ne le supprimez pas, même après 3 ans, c'est toujours utile!
Ali
J'ai pu l'utiliser également dans cygwin, mais pour en faire une fonction avec un paramètre, j'ai dû faire en sorte que "your_pattern" devienne '$ 1'
Koshmaar
215
Il y a pdfgrep , qui fait exactement ce que son nom l'indique.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Je l'ai utilisé pour de simples recherches et cela a bien fonctionné.
(Il existe des paquets dans Debian, Ubuntu et Fedora.)
Depuis la version 1.3.0, pdfgrep prend en charge la recherche récursive. Cette version est disponible dans Ubuntu depuis Ubuntu 12.10 (Quantal).
@pavon a pdfgrepmaintenant cette option de récursivité, y compris -Rpour suivre également les liens symboliques
Tobias Kienzler
30
Recoll est une fantastique application de recherche GUI en texte intégral pour Unix / Linux qui prend en charge des dizaines de formats différents, y compris PDF. Il peut même transmettre le numéro de page exact et le terme de recherche d'une requête à la visionneuse de documents et vous permet ainsi d'accéder directement au résultat depuis son interface graphique.
Recoll est également livré avec une interface de ligne de commande viable et une interface de navigateur Web .
@Glutanimate Cela aiderait (moi et peut-être d'autres aussi) si vous pouviez ajouter un exemple se rapportant à la question d'origine (outil de ligne de commande pour la recherche de plusieurs fichiers PDF): j'aimerais aussi voir comment effectuer une recherche générique et comment rechercher le répertoire courant, y compris tous les sous-répertoires . À quoi cela ressemblerait-il recoll / xapiandans la ligne de commande (non GUI)? Merci!
noisette sur natty
@ LeszekŻarna Peut-être pourriez-vous publier l'exemple que vous avez testé?
fou sur natty
Le recollmanuel de l'utilisateur peut contenir quelques pointeurs, mais offre une lecture plutôt technique et "hors sujet" ...
nutty about natty
1
@nutty: recoll -t -q dir: pwdext: pdf 'neuro *' - stackoverflow a mangé les astuces autour de pwd.
medoc
13
Ma version actuelle de pdfgrep (1.3.0) permet ce qui suit:
pdfgrep -HiR 'pattern' /path
En faisant pdfgrep --help:
H: Imprime le nom du fichier pour chaque correspondance.
+1. Mais au lieu de cela, $filename.vous devriez le canaliser grep.
Raphael Ahrens
3
J'aime la réponse de @ sjr mais je préfère xargs vs -exec. Je trouve les xargs plus polyvalents. Par exemple, avec -P, nous pouvons profiter de plusieurs processeurs lorsque cela est logique de le faire.
point intéressant sur la xargs«capacité de traitement parallèle. Notez que votre --labelargument-option sera littéralement{} , car la grepcommande n'est plus exécutée dans le contexte de find's exec.
mklement0
2
J'ai eu le même problème et j'ai donc écrit un script qui recherche tous les fichiers pdf dans le dossier spécifié pour une chaîne et imprime les fichiers PDF qui correspondent à la chaîne de requête.
peut-être utile de mettre le script dans le commentaire?
baxx
j'ai essayé votre script et il s'avère beaucoup plus lent que la pdfgrepsolution ou le one-liner de sjr, et cela m'a laissé avec un processus en cours utilisant 100% d'un thread CPU même après avoir appuyé sur Ctrl-C pour le terminer.
Jason
2
Si vous voulez voir les noms de fichiers avec pdftotext, utilisez la commande suivante:
Il existe un outil de grep de ressources communes open source crgrep qui recherche dans les fichiers PDF mais aussi d'autres ressources comme le contenu imbriqué dans des archives, des tables de base de données, des métadonnées d'image, des dépendances de fichiers POM et des ressources Web - et leurs combinaisons, y compris la recherche récursive.
La description complète sous l'onglet Fichiers couvre à peu près ce que l'outil prend en charge.
Craig - avez-vous un lien avec ce projet? Si oui, vous devez l'indiquer dans votre réponse. Je dis cela parce que vous venez de poster une réponse pratiquement identique à deux autres anciennes questions ...
Stephen C
Article mis à jour pour préciser que je suis l'auteur de crgrep
Craig
1
Convertissez d'abord tous vos fichiers pdf en fichiers texte:
for file in *.pdf;do pdftotext "$file"; done
Ensuite, utilisez grepcomme d'habitude. Ceci est particulièrement bon car il est rapide lorsque vous avez plusieurs requêtes et beaucoup de fichiers PDF.
Ceci, une fois effectué en combinaison avec aggithub.com/ggreer/the_silver_searcher . Capable d'analyser à psychedeliks Gb par microsecondes. Fichiers plats pour la vie
NVRM
0
Vous avez besoin d'outils comme pdf2text pour convertir d'abord votre pdf en fichier texte, puis rechercher à l'intérieur du texte. (Vous allez probablement manquer des informations ou des symboles).
Si vous utilisez un langage de programmation, il existe probablement des bibliothèques pdf écrites à cet effet. par exemple http://search.cpan.org/dist/CAM-PDF/ pour Perl
Réponses:
Votre distribution doit fournir un utilitaire appelé
pdftotext
:Le "-" est nécessaire pour que la sortie de pdftotext soit vers stdout, pas vers les fichiers. Les options
--with-filename
et--label=
mettront le nom du fichier dans la sortie de grep. Le--color
drapeau optionnel est agréable et indique à grep de sortir en utilisant des couleurs sur le terminal.(Dans Ubuntu,
pdftotext
est fourni par le packagexpdf-utils
oupoppler-utils
.)Cette méthode, utilisant
pdftotext
etgrep
, a un avantage surpdfgrep
si vous voulez utiliser des fonctionnalités de GNUgrep
quipdfgrep
ne prennent pas en charge. Remarque : pdfgrep-1.3.x prend en charge l'-C
option d'impression de la ligne de contexte.la source
grep
filtre les noms des fichiers imprimés.pdfgrep
solution soit bonne pour des recherches très rapides et simples, souvent je veux obtenir un peu de contexte, car une seule ligne ne sera pas assez utile - donc comme j'ai ajouté à cette réponse: Par exemple, vous pouvez ajouter l'option -C5 avant "votre modèle" pour inclure 5 lignes de contexte à la sortie - pdfgrep ne prend pas en charge celapdfgrep
est inutile, il signale une énorme quantité de déchets sur les fichiers qu'il ne peut pas gérer. Votre solution a en revanche aidé. Alors, ne le supprimez pas, même après 3 ans, c'est toujours utile!Il y a pdfgrep , qui fait exactement ce que son nom l'indique.
Je l'ai utilisé pour de simples recherches et cela a bien fonctionné.
(Il existe des paquets dans Debian, Ubuntu et Fedora.)
Depuis la version 1.3.0, pdfgrep prend en charge la recherche récursive. Cette version est disponible dans Ubuntu depuis Ubuntu 12.10 (Quantal).
la source
pdfgrep
maintenant cette option de récursivité, y compris-R
pour suivre également les liens symboliquesRecoll est une fantastique application de recherche GUI en texte intégral pour Unix / Linux qui prend en charge des dizaines de formats différents, y compris PDF. Il peut même transmettre le numéro de page exact et le terme de recherche d'une requête à la visionneuse de documents et vous permet ainsi d'accéder directement au résultat depuis son interface graphique.
Recoll est également livré avec une interface de ligne de commande viable et une interface de navigateur Web .
la source
recoll / xapian
dans la ligne de commande (non GUI)? Merci!recoll
manuel de l'utilisateur peut contenir quelques pointeurs, mais offre une lecture plutôt technique et "hors sujet" ...pwd
ext: pdf 'neuro *' - stackoverflow a mangé les astuces autour de pwd.Ma version actuelle de pdfgrep (1.3.0) permet ce qui suit:
En faisant
pdfgrep --help
:Cela fonctionne bien sur mon Ubuntu.
la source
J'ai fait ce petit script destructeur . Aie du plaisir avec ça.
la source
$filename.
vous devriez le canalisergrep
.J'aime la réponse de @ sjr mais je préfère xargs vs -exec. Je trouve les xargs plus polyvalents. Par exemple, avec -P, nous pouvons profiter de plusieurs processeurs lorsque cela est logique de le faire.
la source
xargs
«capacité de traitement parallèle. Notez que votre--label
argument-option sera littéralement{}
, car lagrep
commande n'est plus exécutée dans le contexte defind
'sexec
.J'ai eu le même problème et j'ai donc écrit un script qui recherche tous les fichiers pdf dans le dossier spécifié pour une chaîne et imprime les fichiers PDF qui correspondent à la chaîne de requête.
Peut-être que cela vous sera utile.
Vous pouvez le télécharger ici
la source
pdfgrep
solution ou le one-liner de sjr, et cela m'a laissé avec un processus en cours utilisant 100% d'un thread CPU même après avoir appuyé sur Ctrl-C pour le terminer.Si vous voulez voir les noms de fichiers avec pdftotext, utilisez la commande suivante:
la source
Il existe un autre utilitaire appelé ripgrep-all , qui est basé sur ripgrep .
Il peut gérer plus que des documents PDF, comme des documents Office et des films, et l'auteur affirme qu'il est plus rapide que
pdfgrep
.Syntaxe de commande pour la recherche récursive du répertoire courant, et la seconde limite aux fichiers PDF uniquement:
la source
Il existe un outil de grep de ressources communes open source crgrep qui recherche dans les fichiers PDF mais aussi d'autres ressources comme le contenu imbriqué dans des archives, des tables de base de données, des métadonnées d'image, des dépendances de fichiers POM et des ressources Web - et leurs combinaisons, y compris la recherche récursive.
La description complète sous l'onglet Fichiers couvre à peu près ce que l'outil prend en charge.
J'ai développé crgrep comme un outil open source.
la source
Convertissez d'abord tous vos fichiers pdf en fichiers texte:
Ensuite, utilisez
grep
comme d'habitude. Ceci est particulièrement bon car il est rapide lorsque vous avez plusieurs requêtes et beaucoup de fichiers PDF.la source
ag
github.com/ggreer/the_silver_searcher . Capable d'analyser à psychedeliks Gb par microsecondes. Fichiers plats pour la vieVous avez besoin d'outils comme pdf2text pour convertir d'abord votre pdf en fichier texte, puis rechercher à l'intérieur du texte. (Vous allez probablement manquer des informations ou des symboles).
Si vous utilisez un langage de programmation, il existe probablement des bibliothèques pdf écrites à cet effet. par exemple http://search.cpan.org/dist/CAM-PDF/ pour Perl
la source
essayez d'utiliser 'acroread' dans un script simple comme celui ci-dessus
la source