Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2006, 16h43   #1
Membre actif
 
Inscription : juin 2003
Messages : 270
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 270
Points : 170
Points : 170
Par défaut Recherche contenu fichier PDF

Bonjour,

je decouvre la commande grep qui permet de faire des recherches de fichiers en fonction de leur contenu. Mais la recherche ignore les fichiers pdf. Apres avoir un peu surfe, j'ai vu que l'utilisation de pdftotext pouvait resoudre le probleme.

question:
quel serait dans ce cas la syntaxe a utiliser ?
par ex: liste des fichiers du rep qui contiennent la chaine 'aaaaaa'
Code :
grep aaaaaa ./* pdftotext ?
ou qqchose du style:

Code :
ls | pdftotext | grep netlink
N'y a t-il pas plus simple que de passer par pdftotext ?

Ma distrib: Debian 3.1 (Sarge)
drinkmilk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 13h17   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 772
Points : 7 772
pdf est un format particulier qui est plus proche d'un langage que d'un bloc de donnée il contient des elements binaires et des elements textes à la fois.

le grepper est donc à priori une mauvaise idée...d'ou l'utilité de n'extraire que le bloc textuel avant de le grepper....

tu dois donc generer le fichier texte avant de le grepper

à la main :
Code :
1
2
pdftotext toto.pdf titi.txt 
grep "aaaaa" titi.txt
mais pdftotext generant un fichier de sortie tu ne peux pas le piper avec une autre commande avec les options par defauts.

si pdftotext à une option qui permet de l'afficher sans cree de fichier texte alors seulement tu peux le piper par un grep...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 14h32   #3
Membre actif
 
Inscription : juin 2003
Messages : 270
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 270
Points : 170
Points : 170
Merci pour ta reponse.

Je comprends la "complexite" technique d'une recherche sur des fichiers pdf. Mais etant donne l'omnipresence de ce format, est-ce qu'il n'existe pas dans le monde Linux un outil qui permet de masquer cette complexite ? Et donc de pouvoir faire une recherche dans une arborescence sans se soucier de la particularite du format pdf ?

En gros, qu'est ce qui permet de se rapprocher de l'ergonomie de la fonction de recherche de fichier de Windows XP (qui permet de lister les fichiers d'une arborescence qui contiennent le mot 'xxxx' , qu'ils soient pdf, doc, txt ou autre) ?

Merci
drinkmilk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2006, 20h33   #4
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
Il y a un outil qui a été mis en place sur le projet Gnome qui va dans ce sens. Malheureusement je ne connais plus le nom, mais il faut chercher par là-bas !

Sinon dans le pire des cas, tu peux toujours piper pdftotext même s'il n'a pas d'option prévue pour :
Code :
1
2
3
4
$ mkfifo FIFO
$ pdftotext file.pdf FIFO &
$ cat FIFO | grep blabla
$ rm FIFO
À partir de là, construire un script devrait être pas trop compliqué ... Mais je n'ai de solution "clé en main" là tout de suite !
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 08h24   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 772
Points : 7 772
Citation:
Envoyé par Tchetch
Code :
1
2
3
4
$ mkfifo FIFO
$ pdftotext file.pdf FIFO &
$ cat FIFO | grep blabla
$ rm FIFO
ta solution construit le fichier de sortie donc c'est pas un pipage réél le pipage se fait sur le cat et pas sur pdftotext
tu ne fais qu'ajouter une couche supplémentaire et faire perdre du temps cpu et d'autres ressources au traitement par rapport à laisser fiinir pdftotext et grepper le fichier de sortie... ok tu vas dire on s'en tape avec la puissance des machines modernes* .... mais c'est pas propre/optimisé....
en plus sur un fichier bien gras** ça pourrait s'averer plus long pour obtenir le résultat final par contre sur un petit fichier c'est négligeable.


*et tu as bien raison
**fichier de grande taille
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 11h07   #6
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
Ouais, mais c'est déjà mieux que rien. Avec un petit script pour enrober tout ça et le faire sur une arborescence complète et le tour est joué !

Sinon oui, il s'agit là bien d'un tube (pipe), mais un tube nommé. Les tubes se travail comme des fichiers. J'aurais pu faire :
On gagne le temps consommé par 'cat' !
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 11h27   #7
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
Et d'ailleur voilà un script fait vite en vitesse qui fera tout ça ... Améliorations ('s' pour 'beaucoup de') possibles !
Mais celui qui veut améliorer il le peut ...
Fichiers attachés
Type de fichier : txt find_text.txt (824 octets, 30 affichages)
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 12h17   #8
Membre actif
 
Inscription : juin 2003
Messages : 270
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 270
Points : 170
Points : 170
Excellent ! Etant donne que je debute, ca m'aurait pris trois jours de pondre ce code.

Parmi les ameliorations, comment faire pour que les noms de fichiers comportant un espace ne pose pas probleme ?

En fait, les lignes 26 et 30 (if [ -d $file ]; then et if [ -f $file ]; then) renvoient une erreur si $file contient un espace.

Merci !
drinkmilk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 14h23   #9
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
C'est juste ... J'avais pas pensé aux espaces ... Rajoute des " autour de $file
Merci
__________________
Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 15h16   #10
Membre actif
 
Inscription : juin 2003
Messages : 270
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 270
Points : 170
Points : 170
Merci. Par contre, y'a encore une ligne ou ca passe pas, toujours pour les fichiers avec espace (la 1ere de la sequence suivante):

Code :
1
2
3
4
5
6
        if [ `echo "$file" | grep ".pdf"` ]; then
            pdftotext "$file" /tmp/$$.fifo &
            line=`cat /tmp/$$.fifo | grep -n "$1"`
        else
            line=`cat "$file" | grep -n "$1"`
        fi
il dit: /bin/find_text: line 31: [: -: binary operator expected

J'ai pas trouve de solution. Une idee ?

Merci !
drinkmilk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h53.


 
 
 
 
Partenaires

Hébergement Web