Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/03/2013, à 21:19

Archonic

[Résolu] Option "-exec" (et "-ok"), commande "find"

Bonsoir,

Une fois n'est pas coutume mais pourtant, je recontre encore une difficulté dans mon apprentissage de la ligne de commande.

C'est sur base de l'e-book "Linux essentials" de Linup Front (disponible sur le site du LPI) que j'étudie.  A la page 90, on me parle d'exécuter directement une commande à appliquer au résultat d'une recherche ... ok, très bien, ça a l'air intéressant.  Et là, vous vous en doutez, les ennuis commencent...

Les fichiers sur lequels je fais mes essais :

[sebastien@louise LinuxEssentials]$ ll
total 8
-rwx------. 1 sebastien sebastien 17 Mar 31 20:31 myscript
-rwx------. 1 sebastien sebastien 17 Mar 31 20:56 myscript1

Et le résultat obtenu sur base de l'exemple du livre:

[sebastien@louise LinuxEssentials]$ find . -user sebastien -exec ls '{}' \;
myscript  myscript1
./myscript
./myscript1

Et comme ça fonctionne bien, je commence à tripoter l'ensemble:

[sebastien@louise LinuxEssentials]$ find . -name m* -exec ls '{}' \;
find: paths must precede expression: myscript1
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Que signifie cette erreur?  A quoi est-elle due?

Il semblerait qu'elle apparaisse lorsque je modifie la condition de test.  Sans la changer, j'ai pu exécuter les scripts "myscript" et "myscript1":

[sebastien@louise LinuxEssentials]$ find . -user sebastien -ok '{}' \;
< {} ... . > ? n
< {} ... ./myscript > ? y
Hello World
< {} ... ./myscript1 > ? y
Hello World

Par ailleurs, je ne suis pas certain de bien comprendre d'où vient le "." proposé avant les scripts.  Je suppose qu'il s'agit du répertoire courant mais comment se fait-il qu'il est également retourné comme résultat de recherche?

Je vous l'accorde, ça fait bien deux problèmes pour le prix d'un: 1/ L'exécution lorsque je change la condition (par rapport au livre) ; 2/ La découverte de "." par find.

En vous remerciant bien fort pour votre coup de main smile

Dernière modification par Archonic (Le 31/03/2013, à 23:56)

Hors ligne

#2 Le 31/03/2013, à 21:54

Haleth

Re : [Résolu] Option "-exec" (et "-ok"), commande "find"

Les lignes sont identiques:

find . -name "m*" ...
find -name "*m" ...

Pour *, il faut mettre des quotes, sinon le shell interpretes.


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 31/03/2013, à 23:56

Archonic

Re : [Résolu] Option "-exec" (et "-ok"), commande "find"

Haleth a écrit :

Pour *, il faut mettre des quotes, sinon le shell interpretes.

Bonsoir,

Merci.  Une erreur de débutant je suppose, on voit que je n'ai pas (encore) l'habitude smile

Et du coup, l'apparition de "." dans les résultats provient sans doute de l'interprétation de "*".

Hors ligne

#4 Le 01/04/2013, à 11:49

tiramiseb

Re : [Résolu] Option "-exec" (et "-ok"), commande "find"

Et du coup, l'apparition de "." dans les résultats provient sans doute de l'interprétation de "*".

L'apparition du "." que tu as constatée n'est pas dans un contexte où tu as utilisé une "*" :

find . -user sebastien -ok '{}' \;

Tu as simplement demandé « trouve-moi tout ce qui appartient à "sebastien" à partir de "." ». Et si le répertoire courant lui-même appartient à "sebastien", alors il sera retourné dans les résultats.

find . -name m* -exec ls '{}' \;

Pour approfondir la réponse de Haleth (et parce que ta dernière phrase laisse penser que tu n'as pas bien compris l'explication).

Comme c'est le shell qui interprète l'astérisque s'il n'y a pas les guillemets, la commande exécutée dans ce cas est :

find . -name myscript myscript1 -exec ls '{}' \;

Et là tu comprends tout de suite pourquoi find a retourné une erreur : il a eu un argument "myscript1" qu'il n'a pas compris...

Hors ligne

#5 Le 01/04/2013, à 16:30

Archonic

Re : [Résolu] Option "-exec" (et "-ok"), commande "find"

tiramiseb a écrit :

Pour approfondir la réponse de Haleth (et parce que ta dernière phrase laisse penser que tu n'as pas bien compris l'explication).

Bonjour,

Merci pour ces infos et le temps que y consacre.  A ma décharge, sans me chercher d'excuse, il était tard.  Mais effectivement, à cette heure-ci ça me semble plus clair smile

Hors ligne