J’utilise Opensuse 10.3 et j’aimerais connaître des outils en ligne de commande pour rechercher des phrases dans un grand nombre de fichiers PDF à l’intérieur d’un répertoire. Sous Windows XP, la recherche de l’Explorateur permet cela mais elle est trop lente. Y a-t-il des astuces avec grep ?
SEARCH_DIR="/some/dir/where/you/want/to/search/";
SEARCH_STRING="whatever-you-are-searching";
# extraction du texte depuis un PDF
pdftotext "fichier.pdf" "fichier.txt"
# combinaison avec grep
pdftotext "fichier.pdf" /dev/stdout |grep -H --label="fichier.pdf" -- "$SEARCH_STRING"
# si vous souhaitez que grep affiche seulement la liste des fichiers PDF correspondants, ajoutez --files-with-matches
pdftotext "fichier.pdf" /dev/stdout |grep -H --label="fichier.pdf" --files-with-matches -- "$SEARCH_STRING"
# trouver la liste possible des PDF à rechercher
find "$SEARCH_DIR" -type f -name '*.pdf' > list-of-pdf.txt
# le tout assemblé par awk comme ruban adhésif, envoyé à bash pour traitement
# les guillemets doubles sont échappés en x22 dans awk.
find "$SEARCH_DIR" -type f -name '*.pdf' |awk -v SEARCH_STRING="$SEARCH_STRING" '{
print "pdftotext \x22"$0"\x22 /dev/stdout | grep -H --label=\x22"$0"\x22 -- \x22"SEARCH_STRING"\x22"
}' |bash
# Sans bash. Traitement supplémentaire selon vos besoins
find "$SEARCH_DIR" -type f -name '*.pdf' |awk -v SEARCH_STRING="$SEARCH_STRING" '
{
EXEC="pdftotext \x22"$0"\x22 /dev/stdout | grep -H --label=\x22"$0"\x22 -- \x22"SEARCH_STRING"\x22";
while(EXEC|getline ret){
print "For fichier ["$0"] we have match ["ret"]";
# faites ce que vous souhaitez.
};
close(EXEC);
}'