
Envoyé par
Sve@r
A noter que la commande externe est exécutée à chaque fichier et non en une fois globale (on le voit si on fait un truc de ce genre: find . -name "*.py" -exec vi {} \; => le "vi" est lancé à chaque fichier
C'est vrai avec cette syntaxe mais si l'on remplace le délimiteur de fin de commande "\;" par un "+", la commande sera exécutée avec autant de paramètres que l'OS en supporte:
find . -name "*.py" -exec vi {} +
Dans ce cas, il faut envoyer la liste à xargs qui se chargera de la découper en blocs et faire traiter ces blocs par ton grep (ou autre)
Cela présente des risques avec des noms de fichiers non standard. Si l'on souhaite une syntaxe portable, il est recommandé d'utiliser "find -exec ...+" qui fait tout aussi bien ce découpage en blocs et ainsi éviter xargs.
Avec Gnu find et Gnu xargs, il faut utiliser les options "find ... -print0" et "xargs -0" pour éviter ces écueils.
Partager