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 puisse pas rechercher les fichiers PDF.
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 la sortie de pdftotext se produise sur stdout et non sur des fichiers. Les options --with-filename
et --label=
placent le nom du fichier dans la sortie de grep. Le drapeau facultatif --color
est Nice et indique à grep de générer une sortie en utilisant les couleurs du terminal.
(Dans Ubuntu, pdftotext
est fourni par le paquetage xpdf-utils
ou poppler-utils
.)
Cette méthode, utilisant pdftotext
et grep
, présente un avantage sur pdfgrep
si vous souhaitez utiliser les fonctionnalités de GNU grep
que pdfgrep
ne supporte pas. Note: pdfgrep-1.3.x supporte l'option -C
pour l'impression d'une ligne de contexte.
Il existe 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).
Recoll est une application de recherche en texte intégral fantastique pour Unix/Linux qui prend en charge des dizaines de formats différents, notamment 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, ce qui vous permet d'accéder directement au résultat directement depuis son interface graphique.
Recoll est également livré avec une interface de ligne de commande viable et un interface de navigateur Web .
Ma version actuelle de pdfgrep (1.3.0) permet ce qui suit:
pdfgrep -HiR 'pattern' /path
Lorsque vous faites pdfgrep --help
:
Cela fonctionne bien sur mon Ubuntu.
J'ai fait ce destructif petit script. Aie du plaisir avec ça.
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
}
J'aime la réponse de @ sjr, mais je préfère xargs vs -exec. Je trouve xargs plus polyvalent. Par exemple, avec -P, nous pouvons tirer parti de plusieurs processeurs lorsqu'il est logique de le faire.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
Si vous voulez voir les noms de fichier avec pdftotext, utilisez la commande suivante:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
J'ai eu le même problème et j'ai donc écrit un script qui cherche une chaîne dans tous les fichiers pdf du dossier spécifié et imprime les fichiers PDF correspondant à la chaîne de requête.
Peut-être que cela vous sera utile.
Vous pouvez le télécharger ici
Il existe un outil open source de ressources communes grep crgrep qui effectue une recherche dans les fichiers PDF, mais également d'autres ressources telles que le contenu imbriqué dans les archives, les tables de base de données, les méta-données d'image, les dépendances de fichiers POM et ressources Web - et leurs combinaisons, y compris la recherche récursive.
La description complète sous l'onglet Fichiers couvre à peu près tout ce que l'outil prend en charge.
J'ai développé crgrep en tant qu'outil opensource.
Commencez par convertir tous vos fichiers pdf en fichiers texte:
for file in *.pdf;do pdftotext "$file"; done
Ensuite, utilisez grep
comme d'habitude. Ceci est particulièrement utile car il est rapide lorsque vous avez plusieurs requêtes et beaucoup de fichiers PDF.
Vous avez besoin d'outils tels que pdf2text pour convertir d'abord votre pdf en fichier texte, puis effectuer une recherche à l'intérieur du texte. (Vous manquerez probablement d'informations ou de 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
Il existe un autre utilitaire appelé ripgrep-all , basé sur ripgrep .
Il peut gérer plus que des PDF documents, tels que des documents Office et des vidéos, et l'auteur affirme , il est plus rapide que pdfgrep
.
La syntaxe de la commande permet de rechercher de manière récursive le répertoire en cours. La seconde limite uniquement les fichiers PDF:
rga 'pattern' .
rga --type pdf 'pattern' .