[gull] nombre instance max avec find

Marc SCHAEFER schaefer at alphanet.ch
Wed Aug 24 09:26:27 CEST 2005


On Tue, Aug 23, 2005 at 04:44:09PM +0200, Cedric BRINER wrote:
> je desire executer un programme sur tout les fichiers qu'un find m'aura trouve.
> find ./ -name '_image_commencant_par*' exec mon_programme {} \;

C'est déjà dommage d'exécuter mon_programme pour chaque fichier. Ne
peut-il pas, comme la plupart des commandes UNIX de base, traiter
plusieurs fichiers ?

Dans ce cas, la commande devient:

   find . -name '_image_*' -print | xargs mon_programme

PS: si les fichiers sont susceptibles de comporter des caractères peu
sympathiques (p.ex. espace, saut de ligne, etc), utiliser:

    ... -print0 | xargs -0 mon_programme

La ligne de commande est limitée sous Linux. xargs connaît cette limite,
et mettra autant de paramètres sur la ligne de commande que possible,
puis attendra la fin de l'exécution de mon_programme, puis lancera une
nouvelle instance avec la suite des paramètres disponibles en entrée
standard.

En jouant avec l'option -n de xargs tu peux déterminer combien de
programmes seront lancés -- à la suite, pas en parallèle, si tu connais
le nombre d'instances de _image_*.

L'option --max-procs de xargs (que je n'ai jamais utilisée) permet de
spécifier combien de processus sont lancés en parallèle (on dirait ...
merci d'essayer et de confirmer).

Et comme a dit un excellent contributeur, si c'est le find qui prend le
plus de temps, lancer plusieurs find sur plusieurs disques différents
(p.ex. si . est composé de ./data ./scratch et de ./, sur des fs
différents situés sur des disques différents).




More information about the gull mailing list