#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
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"
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
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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#5 Le 01/04/2013, à 16:30
- Archonic
Re : [Résolu] Option "-exec" (et "-ok"), commande "find"
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
Hors ligne