XARGS(1) | General Commands Manual | XARGS(1) |
xargs - Construire et exécuter des lignes de commandes à partir de l'entrée standard
xargs [options] [commande [paramètres_initiaux]]
Cette page de manuel documente la version GNU de xargs. xargs lit des éléments délimités par des blancs (pouvant être protégés par des apostrophes, des guillemets ou une contre-oblique) ou par des sauts de ligne depuis l'entrée standard, et exécute une ou plusieurs fois la commande (echo par défaut) en utilisant les paramètres_initiaux suivis des paramètres lus depuis l'entrée standard. Les lignes blanches en entrée sont ignorées.
La ligne de commande pour commande est construite jusqu'à ce qu'elle atteigne une limite définie par le système (sauf si les options -n et -L sont utilisées). La commande spécifiée est invoquée autant de fois que nécessaire pour épuiser la liste d'objets en entrée. En général, il y aura beaucoup moins d'invocations qu'il y a d'objets en entrée. Certaines commandes peuvent, de façon utile, être aussi exécutées en parallèle ; voir l'option -P.
Parce que les noms de fichiers Unix peuvent comporter des blancs et des caractères de saut de ligne, ce comportement par défaut pose souvent des problèmes ; les noms de fichiers qui comportent des blancs et/ou des caractères de saut de ligne sont traités de manière incorrecte par xargs. Dans ces situations, il est préférable d'utiliser l'option -0 qui permet d'éviter ce genre de problèmes. Lorsque cette option est utilisée, il faut s'assurer que le programme qui produit l'entrée pour xargs utilise aussi un octet NULL comme séparateur. 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'état 255, xargs s'arrêtera immédiatement sans lire davantage les paramètres d'entrée. Si cela se produit, un message d'erreur est émis vers la sortie d'erreur standard (stderr).
Veuillez noter qu'il revient aux processus appelés de gérer correctement les accès parallèles aux ressources partagées. Par exemple, si plus d'un processus essaye d'afficher sur la sortie standard, les sorties seront produites dans un ordre indéterminé (et vraisemblablement mélangées) à moins que les processus collaborent d'une certaine manière pour éviter ces problèmes. L'utilisation d'une sorte de schéma de verrouillage est une manière de prévenir ces problèmes. En général, l'utilisation d'un schéma de verrouillage aidera à assurer des sorties correctes mais réduit les performances. Si vous ne voulez pas accepter la différence de performance, il suffit de prendre des dispositions pour que chaque processus produise un fichier de sortie distinct (ou autrement utilise des ressources distinctes).
Les options --max-lines (-L, -l), --replace (-I, -i) et --max-args (-n) s'excluent mutuellement. Si plusieurs d'entre elles sont spécifiées en même temps, alors xargs va généralement utiliser l'option spécifiée en dernier sur la ligne de commande, c'est-à-dire qu'il remettra l'option fautive (donnée précédemment) à sa valeur par défaut. En plus, xargs émettra un diagnostic d'avertissement vers la sortie d'erreur standard (stderr). L’exception à cette règle est que la valeur spéciale nombre-max-param de 1 (« -n1 ») est ignorée après l'option --replace ainsi que ses alias -I et -i parce qu'ils ne devraient pas entrer en conflit réellement.
find /tmp -name noyau -type f -print | xargs /bin/rm -f
Chercher les fichiers dont le nom est noyau dans le répertoire /tmp et ses sous-répertoires, et les effacer. Rappelez-vous que vous pouvez rencontrer des problèmes si des noms de fichiers comportent des retours à 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 répertoire /tmp et ses sous-répertoires, puis les effacer, en veillant à ce que les noms de fichiers ou de répertoires qui contiennent des retours à la ligne ou des espaces soient correctement traités.
find /tmp -depth -name noyau -type f -delete
Chercher les fichiers qui s'appellent noyau dans le répertoire /tmp et ses sous-répertoires, puis les effacer, mais de façon plus efficace que dans l'exemple précédent (puisqu'on évite l'appel à fork(2) et exec(2) pour lancer rm, et que nous n'avons plus besoin du processus supplémentaire xargs).
cut -d: -f1 < /etc/passwd | sort | xargs echoCréer une liste compacte de tous les utilisateurs sur le système.
xargs se termine avec le code de retour suivant :
Les codes de retour supérieurs à 128 sont utilisés par l'interpréteur de commandes pour indiquer une fin de programme due à un signal fatal.
Depuis la version 4.2.9 de GNU xargs, le comportement par défaut 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, à la place.
L'option -o est une extension du standard POSIX pour une meilleure compatibilité avec BSD.
Le standard POSIX permet des implémentations dans lesquelles il existe une limite sur la taille des paramètres fournis aux fonctions exec. La limite peut être aussi basse que 4096 octets, en incluant la taille de l'environnement. Les scripts ne doivent pas compter sur une taille supérieure afin d'être portables. Toutefois, je ne connais aucune implémentation actuelle dans laquelle la limite est aussi basse. L'option --show-limits peut vous permettre de connaître les limites réelles de votre système.
Il n'est pas possible d'utiliser xargs de manière sûre, car il y aura toujours un intervalle de temps entre la production de la liste de fichiers en entrée et leur utilisation dans les commandes produites par xargs. Si d'autres utilisateurs ont accès au système, ils peuvent manipuler le système de fichiers pendant cet intervalle de temps de façon à forcer les actions des commandes lancées par xargs à s'exécuter sur des fichiers non voulus. Pour une discussion plus détaillée sur ce sujet et d'autres problèmes qui y sont liés, veuillez consulter le chapitre « Security Considerations » dans la documentation Texinfo de findutils. L'option -execdir de find peut souvent être utilisé comme alternative plus sûre.
Lorsque vous utilisez l'option -I, chaque ligne lue depuis l'entrée 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 entrée lorsqu'il est utilisé avec l'option -I. Pour contourner cette limitation, vous pouvez utiliser l'option -s pour augmenter la taille du tampon utilisé par xargs, et vous pouvez aussi utiliser un appel supplémentaire à 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 à xargs n'a pas de limite de longueur pour la ligne d'entrée parce que l'option -i n'est pas utilisée. Le deuxième appel à xargs comporte une telle limitation, mais nous nous sommes assurés 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 à la taille de la ligne, c'est pourquoi cette discussion apparaît dans la section BOGUES. Le problème ne se produit pas avec la sortie de find(1) parce qu'il ne produit qu'un seul nom de fichier par ligne.
Aide en ligne de GNU coreutils :
<https://www.gnu.org/software/findutils/#get-help>
Signaler toute erreur de traduction à
<https://translationproject.org/team/fr.html>
Signaler toute autre erreur au moyen du système de suivi de bogues GNU Savannah :
Copyright © 1990-2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 ou supérieure
<https://gnu.org/licenses/gpl.html>.
Ce programme est un logiciel libre. Vous pouvez le modifier et le
redistribuer. Il n'y a AUCUNE GARANTIE dans la mesure autorisée par
la loi.
find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7)
Documentation complète :
<https://www.gnu.org/software/findutils/xargs>
aussi disponible localement à l’aide de la commande :
info xargs
La traduction française de cette page de manuel a été créée par Florentin Duneau <fduneau@gmail.com>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Sylvain Cherrier <sylvain.cherrier@free.fr>, Nicolas François <nicolas.francois@centraliens.net> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.