Syntaxe avec 'find'

Le
Ph. Ivaldi
Bonjour,

$ echo $BASH
/bin/bash

Quelqu'un peut-il me dire quelle est la différence entre ces deux
syntaxes:

find . -type f -exec sh -c 'script $0' {} ;

ET

find . -type f -exec sh -c 'script $0' '{}' ';'

La deuxième ne me semblant pas conventionnelle, il doit bien y avoir une
bonne raison de l'utiliser.
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #736989
2007-05-15, 18:17(+02), Ph Ivaldi:
$ echo $BASH
/bin/bash

Quelqu'un peut-il me dire quelle est la différence entre ces deux
syntaxes:

find . -type f -exec sh -c 'script $0' {} ;

ET

find . -type f -exec sh -c 'script $0' '{}' ';'

La deuxième ne me semblant pas conventionnelle, il doit bien y avoir une
bonne raison de l'utiliser.


Ce qui est important, c'est que find recoive les argument "{}"
et ";", et '' sont des facons de dire au shell de ne pas
traiter certains caracteres specialement (comme le ; qui pour
tous les shells serait autrement consideré comme un separateur
de commandes plutot qu'un argument passé a find).

"{" et "}" sont speciaux dans la plupart des shells modernes,
par exemple au debut d'une ligne, you dans les brace expansions.

Dans ce cas, precis, {} a peu de chance d'etre consideré
specialement surtout par bash, mais rajouter des quotes ne mange
pas de pain.

Note que tu as oublié les quotes autour de $0 above.

find . -type f -exec sh -c 'script "$0"' {} ";"


--
Stéphane

Benoit Izac
Le #736988
Bonjour,

le 15/05/2007 à 18:17, Ph. Ivaldi a écrit dans le message

$ echo $BASH
/bin/bash

Quelqu'un peut-il me dire quelle est la différence entre ces deux
syntaxes:

find . -type f -exec sh -c 'script $0' {} ;

ET

find . -type f -exec sh -c 'script $0' '{}' ';'

La deuxième ne me semblant pas conventionnelle, il doit bien y avoir
une bonne raison de l'utiliser.


« » et « '' » sont deux méthodes différentes pour que « ; » ne soit
pas interprété par le shell ; ces deux syntaxes sont donc équivalentes
et je le prouve ;-) :

% cat viewargs.c
#include
int main(int argc, char *argv[])
{
int i;
for (i = 1; i < argc; ++i)
printf("`%s' ", argv[i]);
puts("");
return 0;
}
% cc -o viewargs viewargs.c
% ./viewargs find . -type f -exec sh -c 'script $0' {} ;
`find' `.' `-type' `f' `-exec' `sh' `-c' `script $0' `{}' `;'
% ./viewargs find . -type f -exec sh -c 'script $0' '{}' ';'
`find' `.' `-type' `f' `-exec' `sh' `-c' `script $0' `{}' `;'
% ./viewargs find . -type f -exec sh -c 'script $0' {} ;
`find' `.' `-type' `f' `-exec' `sh' `-c' `script $0' `{}'

--
Benoit Izac

Ph. Ivaldi
Le #736987
Merci à tous les deux pour vos explications.
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Publicité
Poster une réponse
Anonyme