XARGS(1) General Commands Manual XARGS(1) NOM xargs - Construire et executer des lignes de commandes a partir de l'entree standard SYNOPSIS xargs [options] [commande [parametres_initiaux]] DESCRIPTION Cette page de manuel documente la version GNU de xargs. xargs lit des elements delimites par des blancs (pouvant etre proteges par des apostrophes, des guillemets ou une contre-oblique) ou par des sauts de ligne depuis l'entree standard, et execute une ou plusieurs fois la commande (echo par defaut) en utilisant les parametres_initiaux suivis des parametres lus depuis l'entree standard. Les lignes blanches en entree sont ignorees. La ligne de commande pour commande est construite jusqu'a ce qu'elle atteigne une limite definie par le systeme (sauf si les options -n et -L sont utilisees). La commande specifiee est invoquee autant de fois que necessaire pour epuiser la liste d'objets en entree. En general, il y aura beaucoup moins d'invocations qu'il y a d'objets en entree. Certaines commandes peuvent, de facon utile, etre aussi executees en parallele ; voir l'option -P. Parce que les noms de fichiers Unix peuvent comporter des blancs et des caracteres de saut de ligne, ce comportement par defaut pose souvent des problemes ; les noms de fichiers qui comportent des blancs et/ou des caracteres de saut de ligne sont traites de maniere incorrecte par xargs. Dans ces situations, il est preferable d'utiliser l'option -0 qui permet d'eviter ce genre de problemes. Lorsque cette option est utilisee, il faut s'assurer que le programme qui produit l'entree pour xargs utilise aussi un octet NULL comme separateur. Si ce programme est GNU find par exemple, l'option -print0 le fera pour vous. Si l'appel de la commande se termine avec un code d'etat 255, xargs s'arretera immediatement sans lire davantage les parametres d'entree. Si cela se produit, un message d'erreur est emis vers la sortie d'erreur standard (stderr). OPTIONS -0, --null Les noms des fichiers d'entree sont termines par un octet NULL au lieu d'un espace, et les apostrophes, guillemets et contre-obliques n'ont pas de signification particuliere (chaque caractere est utilise litteralement). Desactive la chaine de fin de fichier, qui est traitee comme tout autre parametre. Utile quand des arguments sont susceptibles de contenir des espaces, des marques de protection ou des contre-obliques. L'option -print0 de GNU find produit une sortie convenant a ce mode. -a fichier, --arg-file=fichier Lire les donnees depuis fichier plutot que depuis l'entree standard (stdin). Si vous utilisez cette option, stdin restera inchangee lors de l'execution de la commande. Sinon, stdin est redirigee depuis /dev/null. --delimiter=delimiteur, -d delimiteur Les objets en entree sont termines par le caractere specifie. Le delimiteur specifie peut etre un caractere simple, un caractere d'echappement dans le style de C tel que \n ou un code d'echappement en octal ou en hexadecimal, avec la meme acception que pour la commande printf. Les caracteres multi-octets ne sont pas acceptes. Lors du traitement de l'entree, les guillemets et les contre-obliques ne sont pas des caracteres speciaux ; tous les caracteres de l'entree sont consideres litteralement. L'option -d desactive toute chaine de fin de fichier qui est traitee comme n'importe quel autre parametre. Cette option peut etre utilisee quand l'entree consiste simplement en des objets separes par des sauts de ligne, bien qu'il soit presque toujours meilleur de concevoir le programme pour qu'il utilise l'option --null lorsque c'est possible. -E chaine-fin-de-fichier Definir la chaine de fin de fichier a chaine-fin-de-fichier. Si la chaine de fin de fichier se trouve dans une ligne d'entree, le reste de l'entree est ignore. Si on n'utilise ni -E ni -e, on n'utilise aucune chaine de fin de fichier. -e[chaine-fin-de-fichier], --eof[=chaine-fin-de-fichier] Cette option est un synonyme de l'option -E. Utiliser de preference -E parce qu'elle est conforme a la norme POSIX alors que cette option ne l'est pas. Si chaine-fin-de-fichier est omis, il n'existe pas de chaine de fin de fichier. Si aucune des options -E et -e n'est utilisee, aucune chaine de fin de fichier n'est utilisee. -I chaine-remplacement Remplacer les occurrences de chaine-remplacement dans les parametres initiaux par les noms lus sur l'entree standard. Dans ce cas, les blancs non proteges ne sont pas consideres comme terminant les items en entree. Le separateur est le caractere de nouvelle ligne. Implique -x et -L 1. -i[chaine-remplacement], --replace[=chaine-remplacement] Cette option est un synonyme de -Ichaine-remplacement si chaine-remplacement est indiquee et de -I{}. Si l'argument chaine-remplacement est absent, le resultat est le meme que -I{}. Cette option est obsolete ; veuillez utiliser -I a la place. -L nombre_max_lignes Utiliser au plus nombre-max-lignes lignes non vides par ligne de commande. Des blancs en fin de ligne permettent a une ligne de se poursuivre logiquement sur la ligne suivante. Implique -x. -l [nombre_max_lignes], --max-lines[=nombre_max_lignes] Synonyme de l'option -L. A l'inverse de -L, le parametre nombre-max-lignes est optionnel. Le parametre nombre-max-lignes vaut 1 par defaut s'il n'est pas indique. L'option -l est obsolete depuis qu'elle a ete remplacee par -L dans la norme POSIX. -n nombre-max-param, --max-args=nombre-max-param Utiliser au plus nombre-max-param parametres par ligne de commande. Un nombre de parametres inferieur a nombre-max-param sera utilise si la taille (consultez l'option -s) est depassee, a moins que l'option -x ne soit indiquee, auquel cas xargs se terminera. -P nombre-max-procs, --max-procs=nombre-max-procs Executer jusqu'a nombre-max-procs processus a la fois ; par defaut, c'est 1. Si le nombre-max-procs est 0, xargs executera a la fois autant de processus que possible. Utiliser l'option -n ou l'option -L avec -P ; autrement il y a un risque que seule une execution soit realisee. Pendant l'execution de xargs, il est possible d'envoyer a son processus un signal SIGUSR1 pour augmenter le nombre des commandes a executer simultanement ou un signal SIGUSR2 pour diminuer ce nombre. Il n'est pas possible d'augmenter ce nombre au-dela de la limite definie par l'implementation (qui est affichee avec l'option --show-limits). Il n'est pas possible de l'abaisser au-dessous de 1. xargs ne met jamais fin a ses commandes ; quand une diminution est demandee, il attend seulement que plus d'une commande existante s'acheve avant d'en lancer une autre. Veuillez noter qu'il revient aux processus appeles de gerer correctement les acces paralleles aux ressources partagees. Par exemple, si plus d'un processus essaye d'afficher sur la sortie standard, les sorties seront produites dans un ordre indetermine (et vraisemblablement melangees) a moins que les processus collaborent d'une certaine maniere pour eviter ces problemes. L'utilisation d'une sorte de schema de verrouillage est une maniere de prevenir ces problemes. En general, l'utilisation d'un schema de verrouillage aidera a assurer des sorties correctes mais reduit les performances. Si vous ne voulez pas accepter la difference de performance, il suffit de prendre des dispositions pour que chaque processus produise un fichier de sortie distinct (ou autrement utilise des ressources distinctes). -o, --open-tty Rouvrir l'entree standard en tant que /dev/tty dans le processus enfant avant l'execution de la commande. Cela est utile si vous souhaitez que xargs s'execute dans une application interactive. -p, --interactive Demander a l'utilisateur s'il faut executer chaque ligne de commande et lire une ligne a partir du terminal. N'executer la commande que si la reponse commence par << y >> ou << Y >>. Implique -t. --process-slot-var=nom Definir la variable d'environnement nom a une valeur unique dans chaque processus enfant execute. Ces variables sont reutilisees une fois que les processus enfant sont termines. Cela peut etre utilise par exemple dans un schema de repartition de charge rudimentaire. -r, --no-run-if-empty Si l'entree standard ne contient aucun caractere non blanc, ne pas executer la commande. Normalement, la commande est executee une fois meme s'il n'y a pas d'entree. Cette option est une extension GNU. -s nombre-max-caracteres, --max-chars=nombre-max-caracteres Utiliser au plus nombre-max-caracteres caracteres par ligne de commande, ce qui inclut la commande et les parametres initiaux, ainsi que les caracteres nuls de terminaison des chaines passees en parametres. La valeur maximale autorisee depend du systeme, et est calculee d'apres la taille limite pour execution, moins la taille de l'environnement, moins 2048 octets pour les en-tetes. Si cette valeur depasse 128 Kio, la valeur par defaut sera 128 Kio ; dans les autres cas, la valeur par defaut correspondra au maximum (1 Kio vaut 1024 octets). xargs s'adapte automatiquement aux contraintes les plus strictes. --show-limits Afficher les limites de la longueur de la ligne de commande telles qu'imposees par le systeme d'exploitation, le choix dans xargs de la taille du tampon et l'option -s. Redirigez /dev/null dans l'entree (en indiquant eventuellement --no-run-if-empty) si vous voulez que xargs ne fasse rien. -t, --verbose Afficher la ligne de commande sur la sortie d'erreur standard avant de l'executer. -x, --exit Terminer si la taille (voir l'option -s) est depassee. --help Afficher un resume des options de xargs et quitter. --version Afficher le numero de version de xargs et quitter. Les options --max-lines (-L, -l), --replace (-I, -i) et --max-args (-n) s'excluent mutuellement. Si plusieurs d'entre elles sont specifiees en meme temps, alors xargs va generalement utiliser l'option specifiee en dernier sur la ligne de commande, c'est-a-dire qu'il remettra l'option fautive (donnee precedemment) a sa valeur par defaut. En plus, xargs emettra un diagnostic d'avertissement vers la sortie d'erreur standard (stderr). L'exception a cette regle est que la valeur speciale nombre-max-param de 1 (<< -n1 >>) est ignoree apres l'option --replace ainsi que ses alias -I et -i parce qu'ils ne devraient pas entrer en conflit reellement. EXEMPLES find /tmp -name noyau -type f -print | xargs /bin/rm -f Chercher les fichiers dont le nom est noyau dans le repertoire /tmp et ses sous-repertoires, et les effacer. Rappelez-vous que vous pouvez rencontrer des problemes si des noms de fichiers comportent des retours a la ligne ou des espaces. find /tmp -name noyau -type f -print0 | xargs -0 /bin/rm -f Chercher les fichiers qui s'appellent noyau dans le repertoire /tmp et ses sous-repertoires, puis les effacer, en veillant a ce que les noms de fichiers ou de repertoires qui contiennent des retours a la ligne ou des espaces soient correctement traites. find /tmp -depth -name noyau -type f -delete Chercher les fichiers qui s'appellent noyau dans le repertoire /tmp et ses sous-repertoires, puis les effacer, mais de facon plus efficace que dans l'exemple precedent (puisqu'on evite l'appel a fork(2) et exec(2) pour lancer rm, et que nous n'avons plus besoin du processus supplementaire xargs). cut -d: -f1 < /etc/passwd | sort | xargs echo Creer une liste compacte de tous les utilisateurs sur le systeme. CODE DE RETOUR xargs se termine avec le code de retour suivant : 0 s'il reussit 123 si une invocation de la commande s'est terminee avec une valeur de retour comprise entre 1 et 125 124 si la commande s'est terminee avec un code de retour de 255 125 si la commande a ete tuee par un signal 126 si la commande ne peut pas etre executee 127 si la commande n'a pas ete trouvee 1 Si une autre erreur s'est produite. Les codes de retour superieurs a 128 sont utilises par l'interpreteur de commandes pour indiquer une fin de programme due a un signal fatal. CONFORMITE AUX STANDARDS Depuis la version 4.2.9 de GNU xargs, le comportement par defaut de xargs est de ne pas avoir de marqueur logique de fin de fichier. La norme POSIX (IEEE Std 1003.1, 2004 Edition) le permet. Les options -l et -i sont apparues dans la version de la norme POSIX de 1997, mais n'apparaissent plus dans la version 2004 de la norme. Vous devriez donc utiliser respectivement -L et -I, a la place. L'option -o est une extension du standard POSIX pour une meilleure compatibilite avec BSD. Le standard POSIX permet des implementations dans lesquelles il existe une limite sur la taille des parametres fournis aux fonctions exec. La limite peut etre aussi basse que 4096 octets, en incluant la taille de l'environnement. Les scripts ne doivent pas compter sur une taille superieure afin d'etre portables. Toutefois, je ne connais aucune implementation actuelle dans laquelle la limite est aussi basse. L'option --show-limits peut vous permettre de connaitre les limites reelles de votre systeme. BOGUES Il n'est pas possible d'utiliser xargs de maniere sure, car il y aura toujours un intervalle de temps entre la production de la liste de fichiers en entree et leur utilisation dans les commandes produites par xargs. Si d'autres utilisateurs ont acces au systeme, ils peuvent manipuler le systeme de fichiers pendant cet intervalle de temps de facon a forcer les actions des commandes lancees par xargs a s'executer sur des fichiers non voulus. Pour une discussion plus detaillee sur ce sujet et d'autres problemes qui y sont lies, veuillez consulter le chapitre << Security Considerations >> dans la documentation Texinfo de findutils. L'option -execdir de find peut souvent etre utilise comme alternative plus sure. Lorsque vous utilisez l'option -I, chaque ligne lue depuis l'entree est mise en tampon en interne. Cela signifie qu'il y a une limite maximale pour la longueur de la ligne que xargs peut accepter en entree lorsqu'il est utilise avec l'option -I. Pour contourner cette limitation, vous pouvez utiliser l'option -s pour augmenter la taille du tampon utilise par xargs, et vous pouvez aussi utiliser un appel supplementaire a xargs afin de vous assurer qu'il n'y a pas de ligne trop longue. Par exemple : une_commande | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}' Ici, le premier appel a xargs n'a pas de limite de longueur pour la ligne d'entree parce que l'option -i n'est pas utilisee. Le deuxieme appel a xargs comporte une telle limitation, mais nous nous sommes assures qu'il ne lui serait jamais soumis une ligne plus longue que ce qu'il sait traiter. Ce n'est pas une solution parfaite. Il vaudrait mieux que l'option -i n'impose pas de limite a la taille de la ligne, c'est pourquoi cette discussion apparait dans la section BOGUES. Le probleme ne se produit pas avec la sortie de find(1) parce qu'il ne produit qu'un seul nom de fichier par ligne. SIGNALER DES BOGUES Aide en ligne de GNU coreutils : Signaler toute erreur de traduction a Signaler toute autre erreur au moyen du systeme de suivi de bogues GNU Savannah : Les sujets generaux concernant le paquet GNU findutils sont discutes sur la liste de diffusion bug-findutils : COPYRIGHT Copyright (C) 1990-2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 ou superieure . Ce programme est un logiciel libre. Vous pouvez le modifier et le redistribuer. Il n'y a AUCUNE GARANTIE dans la mesure autorisee par la loi. VOIR AUSSI find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7) Documentation complete : aussi disponible localement a l'aide de la commande : info xargs TRADUCTION La traduction francaise de cette page de manuel a ete creee par Florentin Duneau , Jean-Luc Coulon (f5ibh) , Sylvain Cherrier , Nicolas Francois et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . XARGS(1)