OVH Cloud OVH Cloud

find : -exec vs |xargs

22 réponses
Avatar
mpg
Bonjour,

Je viens de lire dans un script une utilisation de find dont le résultat est
redirigé vers un xargs. J'avoue être un peu surpris car il me semblait
que -exec était un peu fait pour ça justement.

Quel est donc la différence entre utiliser -exec et xargs : les deux sont-ils
utilisables dans tous les cas ? L'un est-il plus (sûr|souple|performant) dans
certains cas ?

Merci d'avance pour vos avis.

Manuel,
petit scarabée qui découvre find avec émerveillement.

10 réponses

1 2 3
Avatar
Luc.Habert.00__arjf
mpg :

Oki. D'ailleurs que fait xargs quand il y trop d'arguments ? Il se
débrouille pour faire plusieurs lignes de commande ?


Oui, c'est un peu son but principal, en fait.

Parce que ça doit quand même arriver assez facilement, en parcourant une
grosse arborescence, non ?


Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script d'upgrade d'un
package debian echouer à cause de ça. J'ai du faire un xargs rm à la main et
relancer l'upgrade.

Avatar
Nicolas George
Luc Habert wrote in message <fbcmf7$n1m$:
Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script d'upgrade d'un
package debian echouer à cause de ça. J'ai du faire un xargs rm à la main et
relancer l'upgrade.


À noter que ça n'arrivera plus à partir de Linux 2.6.23.

Avatar
Thierry PINELLI
Nicolas George wrote:

Luc Habert wrote in message <fbcmf7$n1m$:

Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script d'upgrade d'un
package debian echouer à cause de ça. J'ai du faire un xargs rm à la main et
relancer l'upgrade.


À noter que ça n'arrivera plus à partir de Linux 2.6.23.


quel rapport entre un noyau et un script pourrave de chez Debian ?


Avatar
Luc.Habert.00__arjf
J'imagine que le noyau ne met plus de limite sur la taille de l'argv? Je
présume qu'on va avoir droit à quelques trous de sécurité par buffer
overflow sur la taille de l'argv.
Avatar
Alain Ketterlin
Thierry PINELLI writes:

Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script
d'upgrade d'un package debian echouer à cause de ça. J'ai du faire
un xargs rm à la main et relancer l'upgrade.


À noter que ça n'arrivera plus à partir de Linux 2.6.23.


quel rapport entre un noyau et un script pourrave de chez Debian ?


C'est le noyau qui donne la mémoire au processus, laquelle contient
les arguments. La limite actuelle (celle qui provoque le "arg list too
long", cad un E2BIG renvoyé par execve) est fixe, elle deviendra
variable. Ca veut dire que cette erreur va devenir plus rare.

-- Alain.



Avatar
Stephane Chazelas
2007-09-02, 18:22(+02), Thierry PINELLI:
Nicolas George wrote:

Luc Habert wrote in message <fbcmf7$n1m$:

Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script d'upgrade d'un
package debian echouer à cause de ça. J'ai du faire un xargs rm à la main et
relancer l'upgrade.


À noter que ça n'arrivera plus à partir de Linux 2.6.23.


quel rapport entre un noyau et un script pourrave de chez Debian ?


Voir kernel commit id b6a2fea39318e43fee84fa7b0b90d68bed92d2ba

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h¶a2fea39318e43fee84fa7b0b90d68bed92d2ba

--
Stéphane



Avatar
Marc
Nicolas George wrote:

Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script d'upgrade d'un
package debian echouer à cause de ça. J'ai du faire un xargs rm à la main et
relancer l'upgrade.


À noter que ça n'arrivera plus à partir de Linux 2.6.23.


Sauf qu'un certain nombre de shells limitent la taille maximale d'une
ligne de commande, même quand le noyau arriverait à en gérer plus.


Avatar
Stephane Chazelas
2007-09-2, 17:13(+00), Marc:
[...]
Oui, il m'est déjà arrivé de voir un « rm .../* » d'un script d'upgrade d'un
package debian echouer à cause de ça. J'ai du faire un xargs rm à la main et
relancer l'upgrade.


À noter que ça n'arrivera plus à partir de Linux 2.6.23.


Sauf qu'un certain nombre de shells limitent la taille maximale d'une
ligne de commande, même quand le noyau arriverait à en gérer plus.


Comme ?

--
Stéphane



Avatar
Marc
Stephane Chazelas wrote:

Sauf qu'un certain nombre de shells limitent la taille maximale d'une
ligne de commande, même quand le noyau arriverait à en gérer plus.
Comme ?



Hmm ah non tiens, je ne trouve pas, je croyais mais j'ai dû me tromper.
Merci de me l'avoir montré...


Avatar
Stephane Chazelas
2007-09-3, 11:41(+00), Marc:
Stephane Chazelas wrote:

Sauf qu'un certain nombre de shells limitent la taille maximale d'une
ligne de commande, même quand le noyau arriverait à en gérer plus.
Comme ?



Hmm ah non tiens, je ne trouve pas, je croyais mais j'ai dû me tromper.
Merci de me l'avoir montré...


Quel force de persuasion ! :)

J'ai rien dit, j'ai juste demandé. Je n'ai jamais entendu parlé
d'une telle limitation, mais ca ne veut pas dire qu'elle n'a
jamais existé. Elle n'existe pas a ma connaissance dans les
shells modernes, mais elle a pu exister dans des vieux csh par
exemple.

--
Stéphane



1 2 3