diff --git a/00TODO b/00TODO index 2906afd..4922ca1 100644 --- a/00TODO +++ b/00TODO @@ -93,7 +93,6 @@ cours/images/xfig.html cours/index.html cours/rcs.html cours/unix/cercles.html -cours/unix/chercher.html cours/unix/communiquer.html cours/unix/disquettes.html cours/unix/divers.html diff --git a/unix/chercher.tml b/unix/chercher.tml new file mode 100644 index 0000000..8246819 --- /dev/null +++ b/unix/chercher.tml @@ -0,0 +1,233 @@ + + + + +Chercher + + + +

Chercher des mots et des fichiers sous Unix

+ +

Chercher des mots : grep mot fichiers

+ +

Syntaxe

+ +

+grep mot fichiers sert à retrouver +une chaîne de caractères dans des fichiers (zgrep, beaucoup moins +standard, s'utilise avec les fichiers compressés). Nous n'entrerons pas dans +les détails de la syntaxe. Il suffit de savoir que : +

+ + + + + + + + + + + + +
*.tex(étoile point tex)signifie « n'importe quel fichier .tex » +(*.tex signifie « tout ce qui ne commence pas par un point et +qui finit par .tex »).
**/(étoile étoile)désigne le répertoire courant et tous ses sous-répertoires.
+ +

+Donc : +

+ + + + + + + + + + + + + + + + + + + + + + +
Pour chercher «coucou» dans On tape
Tous les fichiers .tex du répertoire où l'on se trouve grep coucou *.tex
Tous les fichiers du répertoire où l'on se trouve grep coucou *
Tous les fichiers .tex du répertoire courant et de ses +sous-répertoires grep coucou **/*.tex
Tous les fichiers du répertoire courant et de ses sous-répertoires grep coucou **/*
+ +

+Par exemple, Toto cherche le mot «travail» dans tous les fichiers +.tex du répertoire où il se trouve : +

+ +
+corvette ~ $ grep travail *.tex
+caire.tex:les voit presque tous les matins, travailler par équipes de deux ou 
+jordanie.tex:méridionale, le socle ancien apparaît. Le travail de l'érosion dans les
+jordanie.tex:Le pays compte également sur les remises des travailleurs expatriés qui, au
+
+ +

+Quand plusieurs fichiers sont parcourus, grep indique dans quel +fichier se trouve le mot demandé (mot au sens de «chaîne de caractères»). +

+ +

Options de grep

+ +

+Il y a différentes options à grep, dont : +

+ + + +

+Bien entendu, ces options sont compatibles entre elles : +

+ +
+corvette ~ $ grep -nc travail caire.tex
+caire.tex-371-société.  On compte environ 40\,000 de ces éboueurs chiffonniers qui
+caire.tex-372-vivent dans de misérables bidonvilles aux abords de la capitale. On
+caire.tex:373:les voit presque tous les matins, travailler par équipes de deux ou
+caire.tex-374-trois hommes, habillés comme des épouvantails, avec des chapeaux de
+caire.tex-375-paille et de vieux vêtements hétéroclites; accompagnés de leurs 
+corvette ~ $ grep -c travail *.tex
+caire.tex:1 
+egypte.tex:0 
+jordanie.tex:2 
+syrie.tex:0
+
+ +

Confort

+ +

+Défilement : il peut arriver que le mot recherché figure +très souvent, et qu'une série de lignes se mettent à défiler sur l'écran, +parce qu'elle n'ont pas la place d'y figurer toutes. Dans ce cas, vous pouvez +taper +

+ +
grep machin * | less
+ +

+Le | ( pipe en anglais : tuyau) connecte la sortie +standard d'une commande (c'est-à-dire le résultat visible de cette +commmande) sur l'entrée standard d'une autre commande (ici +less); dans notre cas, cela signifie que les lignes produites +par grep pourront être lues avec less, comme un +fichier. +

+ +

+Lignes parasites : grep passe en revue tous +les répertoires et fichiers; quand on ne lui précise pas la nature du fichier +(* et non pas *.tex), il signale tous les +répertoires qu'il examine. Pour éliminer toutes ces lignes parasites, il faut +ajouter 2>/dev/null à la fin de la ligne de commande +(/dev/null est une sorte de poubelle où on redirige les données +dont on veut se débarasser). Par exemple : +

+ +
+grep coucou **/* 2>/dev/null
+grep coucou **/* 2>/dev/null | less
+
+ +

+Allez faire les exercices sur grep et les +expressions régulières . +

+ +

Trouver un fichier : find

+ +

+find répertoire fichier sert à +retrouver un fichier selon certaines caractéristiques (nom, taille...). +L'option -name sert à indiquer le nom du fichier recherché : +

+ +

+find répertoire -name nom-du-fichier +

+ +

+Le répertoire est ~ (tilde) quand on veut chercher dans tout son +compte, . (point) quand on veut chercher dans le répertoire +courant (et ses sous-répertoires). +

+ +

Exemples :

+ +
    +
  1. Supposons que Toto cherche un fichier egypte.tex (qui se +trouve dans un répertoire geo/) : +
    +corvette ~ $ find ~ -name egypte.tex /users/97/litt/toto/geo/egypte.tex
    +
    +
  2. +
  3. Dans ~toto/histoire/moderne/documents/ il y a un fichier +appelé chrono et Toto se trouve dans +histoire/ : +
    +corvette $ find . -name chrono ./moderne/documents/chrono
    +
    +
  4. +
+ +

+Si vous ne vous rappelez que d'une partie du nom du fichier, +on utilise les jokers (voir le cours du Hublot sur +Les jokers, +numéro 2, décembre 1999). Reprenons le cas 1; Toto sait juste +qu'il y a «gypt» dans le nom du fichier; il fera ainsi sa demande : +

+ +
+corvette ~ $ find ~ -name '*gypt*' /users/97/litt/toto/geo/egypte.tex
+
+ +

+« *gypt* » peut se comprendre comme « n'importe quoi avant +et après la suite de caractères « gypt ». Les quotes +(apostrophes) servent à garantir que les étoiles seront interprétées par +find, et non par le shell. +

+ + +

+Find est une +commande très puissante, qui permet de chercher un fichier non +seulement en fonction de son nom, mais aussi de son type, de sa date de +modification, de sa taille... Pour toutes ces options, voir les +exercices sur find. +

+ +
+Auteur : Émilia Robin. Dernière modification le 2002-11-16. +
+ + +