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 grep
vous ne puissiez pas rechercher de fichiers PDF.
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 grep
vous ne puissiez pas rechercher de fichiers PDF.
Réponses:
Votre distribution doit 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 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 package xpdf-utils
ou poppler-utils
.)
Cette méthode, utilisant pdftotext
et grep
, a un avantage sur pdfgrep
si vous voulez utiliser des fonctionnalités de GNU grep
qui pdfgrep
ne prennent pas en charge. Remarque : pdfgrep-1.3.x prend en charge l' -C
option d'impression de la ligne de contexte.
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 cela
pdfgrep
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.
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).
pdfgrep
maintenant cette option de récursivité, y compris -R
pour suivre également les liens symboliques
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 .
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:
pdfgrep -HiR 'pattern' /path
En faisant pdfgrep --help
:
Cela fonctionne bien sur mon Ubuntu.
J'ai fait ce petit script destructeur . 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
}
$filename.
vous devriez le canaliser grep
.
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.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
«capacité de traitement parallèle. Notez que votre --label
argument-option sera littéralement {}
, car la grep
commande n'est plus exécutée dans le contexte de find
's exec
.
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
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:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
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:
rga 'pattern' .
rga --type pdf 'pattern' .
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.
Convertissez d'abord 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 bon car il est rapide lorsque vous avez plusieurs requêtes et beaucoup de fichiers PDF.
ag
github.com/ggreer/the_silver_searcher . Capable d'analyser à psychedeliks Gb par microsecondes. Fichiers plats pour la vie
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