Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Syntaxe avec 'find'

3 réponses
Avatar
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/

3 réponses

Avatar
Stephane Chazelas
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

Avatar
Benoit Izac
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 <stdio.h>

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

Avatar
Ph. Ivaldi
Merci à tous les deux pour vos explications.
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/