301 votes

Comment rechercher le contenu de plusieurs fichiers PDF ?

Comment puis-je rechercher le contenu des fichiers PDF dans un répertoire/sous-répertoire ? Je cherche des outils en ligne de commande. Il semble que grep ne peut pas faire de recherche dans les fichiers PDF.

6 votes

Grep ne fonctionnera pas, car le PDF est un format binaire et le texte est souvent compressé ou codé de diverses manières.

4 votes

Voici une solution GUI : Adobe Reader, voir wikispaces.psu.edu/display/training/

3 votes

292voto

Graeme Points 731

Il y a pdfgrep qui fait exactement ce que son nom suggère.

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

Je l'ai utilisé pour des recherches simples et cela a bien fonctionné.

(Il existe des paquets dans Debian, Ubuntu et Fedora).

Depuis la version 1.3.0 pdfgrep supporte la recherche récursive. Cette version est disponible dans Ubuntu depuis Ubuntu 12.10 (Quantal).

1 votes

De Natty (Ubuntu 11.04) vers le haut (Voir packages.ubuntu.com/ )

3 votes

@pavon pdfgrep dispose désormais de cette option de récursion, notamment -R pour suivre également les liens symboliques

1 votes

J'ai un problème avec cet outil sur Debian 10. Il ne trouve pas certaines chaînes de caractères qui peuvent être trouvées avec evince. Il s'avère être assez peu fiable.

246voto

sjr Points 5686

Votre distribution devrait fournir un utilitaire appelé pdftotext :

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

Le "-" est nécessaire pour que pdftotext sorte sur stdout, et non dans des fichiers. L'adresse --with-filename y --label= mettra le nom du fichier dans la sortie de grep. Les options --color est agréable et indique à grep d'utiliser les couleurs du terminal.

(Dans Ubuntu, pdftotext est fourni par le paquet xpdf-utils o poppler-utils .)

Cette méthode, qui utilise pdftotext y grep a un avantage sur pdfgrep si vous souhaitez utiliser les fonctionnalités de GNU grep que pdfgrep ne prend pas en charge. Nota : pdfgrep-1.3.x prend en charge -C option pour imprimer la ligne de contexte.

1 votes

@Kurt Pfeifle L'édition "(Edit by -kp-)" que vous avez faite ne fonctionne pas depuis que je l'ai fait. grep filtre les noms de fichiers imprimés.

0 votes

@sjr non, alors que le pdfgrep est une bonne solution pour les recherches simples et rapides, mais il arrive souvent que je veuille obtenir un certain contexte, car une seule ligne n'est pas assez utile, comme je l'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 supporte pas ceci

0 votes

Oh c'est cool, content de savoir qu'il y a des avantages à cela même si c'est beaucoup moins évident pour la plupart des gens ce qu'il fait

37voto

Glutanimate Points 221

Recoll est une fantastique application de recherche plein texte GUI pour Unix/Linux qui prend en charge des dizaines de formats différents, y compris le PDF. Elle 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 au résultat directement depuis son interface graphique.

Recoll est également doté d'une interface de ligne de commande viable et d'un logiciel de gestion des données. interface de navigateur web .

2 votes

@Glutanimate Cela m'aiderait (moi et peut-être d'autres aussi) si vous pouviez ajouter un exemple en rapport avec la question initiale (outil en ligne de commande pour la recherche de plusieurs pdf) : Je voudrais également voir comment effectuer un recherche aléatoire et comment effectuer des recherches dans le le répertoire actuel, y compris tous les sous-répertoires . Comment cela se présenterait-il avec recoll / xapian en ligne de commande (sans interface utilisateur) ? Merci !

0 votes

@LeszekZarna Peut-être pourriez-vous poster l'exemple que vous avez testé ?

0 votes

El recoll manuel utilisateur peut contenir quelques indications, mais offre une lecture plutôt technique et "hors sujet"...

19voto

arkhi Points 51

Ma version actuelle de pdfgrep (1.3.0) permet ce qui suit :

pdfgrep -HiR 'pattern' /path

En faisant pdfgrep --help :

  • H : Imprimer le nom du fichier pour chaque correspondance.
  • i : Ignorer les distinctions de cas.
  • R : Recherche récursive dans les répertoires.

Il fonctionne bien sur mon Ubuntu.

7voto

phil Points 61

J'ai fait ça destructeur petit script. Amusez-vous avec.

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
}

3 votes

+1. Mais au lieu de la $filename. vous devez l'intégrer dans grep .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X