XARGS
Table des matières
Retour à l'index
NOM
xargs - Construire et exécuter des lignes de commandes à partir de l'entrée
standard
SYNOPSIS
xargs
[options] [commande [paramètres_initiaux]]
DESCRIPTION
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 la 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. Cela
conduira normalement à un gain de performances. 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).
OPTIONS
- -0, --null
-
Les noms des fichiers d'entrée sont terminés par un octet NULL au lieu d'un
espace, et les apostrophes, guillemets et contre-obliques n'ont pas de
signification particulière (chaque caractère est utilisé
littéralement). Désactive la chaîne de fin de fichier, qui est traitée comme
tout autre paramètre. 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 à ce mode.
- -a fichier, --arg-file=fichier
-
Lire les données depuis fichier plutôt que depuis l'entrée standard
(stdin). Si vous utilisez cette option, stdin restera inchangée lors de
l'exécution de la commande. Sinon, stdin est redirigée depuis /dev/null.
- --delimiter=délimiteur, -d délimiteur
-
Les objets en entrée sont terminés par le caractère spécifié. Le délimiteur
spécifié peut être un caractère simple, un caractère d'échappement dans le
style de C tel que \n ou un code d'échappement en octal ou en
hexadécimal, avec la même acception que pour la commande printf. Les
caractères multioctets ne sont pas acceptés. Lors du traitement de l'entrée,
les guillemets et les contre-obliques ne sont pas des caractères spéciaux ;
tous les caractères de l'entrée sont considérés littéralement. L'option
-d désactive toute chaîne de fin de fichier qui est traitée comme
n'importe quel autre paramètre. Cette option peut être utilisée quand
l'entrée consiste simplement en des objets séparés 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 chaîne-fin-de-fichier
-
Définir la chaîne de fin de fichier à chaîne-fin-de-fichier. Si la chaîne
de fin de fichier se trouve dans une ligne d'entrée, le reste de l'entrée
est ignoré. Si on n'utilise ni -E ni -e, on n'utilise aucune chaîne de
fin de fichier.
- -e[chaîne-fin-de-fichier], --eof[=chaîne-fin-de-fichier]
-
Cette option est un synonyme de l'option -E. Utiliser de préférence -E
parce qu'elle est conforme à la norme POSIX alors que cette option ne l'est
pas. Si chaîne-fin-de-fichier est omis, il n'existe pas de chaîne de fin
de fichier. Si aucune des options -E et -e n'est utilisée, aucune
chaîne de fin de fichier n'est utilisée.
- -I chaîne-remplacement
-
Remplacer les occurrences de chaîne-remplacement dans les paramètres
initiaux par les noms lus sur l'entrée standard. Dans ce cas, les blancs non
protégés ne sont pas considérés comme terminant les items en entrée. Le
séparateur est le caractère de nouvelle ligne. Implique -x et -L 1.
- -i[chaîne-remplacement], --replace[=chaîne-remplacement]
-
Cette option est un synonyme de -Ichaîne-remplacement si
chaîne-remplacement est indiquée. Si l’argument chaîne-remplacement
est absent, le résultat est le même que -I{}. L'option -i est
obsolète ; veuillez utiliser -I à 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 à 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. À l'inverse de -L, le paramètre
nombre-max-lignes est optionnel. Le paramètre nombre-max-lignes vaut
1 par défaut s'il n'est pas indiqué. L'option -l est obsolète depuis
qu'elle a été remplacée par -L dans la norme POSIX.
- -n nombre-max-param, --max-args=nombre-max-param
-
Utiliser au plus nombre-max-param paramètres par ligne de commande. Un
nombre de paramètres inférieur à nombre-max-param sera utilisé si la
taille (consultez l'option -s) est dépassée, à moins que l'option -x
ne soit indiquée, auquel cas xargs se terminera.
- -P nombre-max-procs, --max-procs=nombre-max-procs
-
Exécuter jusqu'à nombre-max-procs processus à la fois ; par défaut, c'est
1. Si le nombre-max-procs est 0, xargs exécutera à 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 exécution soit
réalisée. Pendant l'exécution de xargs, il est possible d'envoyer à son
processus un signal SIGUSR1 pour augmenter le nombre des commandes à
exécuter simultanément ou un signal SIGUSR2 pour diminuer ce nombre. Il
n'est pas possible d'augmenter ce nombre au-delà de la limite définie par
l'implémentation (qui est affichée avec l'option --show-limits). Il n'est
pas possible de l'abaisser au-dessous de 1. xargs ne met jamais fin à
ses commandes ; quand une diminution est demandée, il attend seulement que
plus d'une commande existante s'achève avant d'en lancer une autre. xargs
attend toujours qu'un processus enfant termine avant de terminer lui-même
(mais, voir BOGUES).
Si vous n'utilisez pas l'option -P, xargs ne pourra pas traiter les
signaux SIGUSR1 et SIGUSR2, ce qui signifie qu'ils mettront fin au programme
(à moins d'être bloqués dans le processus parent avant le démarrage de
xargs).
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).
- -o, --open-tty
-
Rouvrir l'entrée standard en tant que /dev/tty dans le processus enfant
avant l'exécution de la commande. Cela est utile si vous souhaitez que
xargs exécute une application interactive.
- -p, --interactive
-
Demander à l'utilisateur s'il faut exécuter chaque ligne de commande et lire
une ligne à partir du terminal. N'exécuter la commande que si la réponse
commence par « y » ou « Y ». Implique -t.
- --process-slot-var=nom
-
Définir la variable d'environnement nom à une valeur unique dans chaque
processus enfant exécuté. Ces variables sont réutilisées une fois que les
processus enfant sont terminés. Cela peut être utilisé par exemple dans un
schéma de répartition de charge rudimentaire.
- -r, --no-run-if-empty
-
Si l'entrée standard ne contient aucun caractère non blanc, ne pas exécuter
la commande. Normalement, la commande est exécutée une fois même s'il n'y a
pas d'entrée. Cette option est une extension GNU.
- -s nombre-max-caractères, --max-chars=nombre-max-caractères
-
Utiliser au plus nombre-max-caractères caractères par ligne de commande,
ce qui inclut la commande et les paramètres initiaux, ainsi que les octets
NULL de terminaison des chaînes passées en paramètres. La valeur maximale
autorisée dépend du système, et est calculée d'après la taille limite pour
une exécution, moins la taille de l'environnement, moins 2048 octets pour
les en-têtes. Si cette valeur dépasse 128 Kio, la valeur par défaut sera
128 Kio ; dans les autres cas, la valeur par défaut 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'imposées par le système d'exploitation, le choix dans xargs de la
taille du tampon et l'option -s. Redirigez l’entrée à partir de
/dev/null (en indiquant éventuellement --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'exécuter.
- -x, --exit
-
Terminer si la taille (voir l'option -s) est dépassée.
- --
-
Délimiter la liste d'options. Les derniers arguments, si présents, sont
traités comme des opérandes même s'ils commencent par -. Par exemple,
xargs-- --help exécute la commande --help (trouvée dans PATH) au
lieu d'afficher le texte d'usage, et xargs -- --macommande exécute la
commande --macommande au lieu de la rejeter comme option inconnue.
- --help
-
Afficher un résumé des options de xargs et quitter.
- --version
-
Afficher le numéro 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 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 de
nombre-max-param 1 (« -n1 ») est ignorée après l'option
--replace ainsi que ses alias -I et -i parce qu'elle ne devrait pas
entrer en conflit réellement.
EXEMPLES
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 echo
Créer une liste compacte de tous les utilisateurs sur le système.
CODE DE RETOUR
xargs se termine avec le code de retour suivant :
-
- 0
-
s'il réussit
- 123
-
si une invocation de la commande s'est terminée avec une valeur de retour
comprise entre 1 et 125
- 124
-
si la commande s'est terminée avec un code de retour de 255
- 125
-
si la commande a été tuée par un signal
- 126
-
si la commande ne peut pas être exécutée
- 127
-
si la commande n'a pas été trouvée
- 1
-
si une autre erreur s'est produite.
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.
CONFORMITÉ AUX STANDARDS
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, Edition 2004) 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 dans laquelle la limite réelle est aussi basse. L'option
--show-limits peut vous permettre de connaître les limites réelles de
votre système.
Dans les versions de xargs jusqu’à la version 4.9.0 incluse, SIGUSR1 et
SIGUSR2 ne provoqueront pas la fin de xargs même si l'option -P n'a
pas été utilisée.
HISTORIQUE
Le programme xargs a été inventé par Herb Gellis aux Laboratoires Bell.
Voir le manuel Texinfo pour findutils, Finding Files, pour plus
d'informations.
BOGUES
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ée 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.
Dans les versions de xargs jusqu’à la version 4.9.0 incluse, xargs -P
finira alors que certains de ses enfants sont encore en activité, si l'un
d'eux fini avec de code de retour 255.
SIGNALER DES BOGUES
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 :
-
<https://savannah.gnu.org/bugs/?group=findutils>
Les sujets généraux concernant le paquet GNU findutils sont discutés sur la
liste de diffusion bug-findutils :
-
<https://lists.gnu.org/mailman/listinfo/bug-findutils>
COPYRIGHT
Copyright © 1990-2024 Free Software Foundation, Inc. Licence 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.
VOIR AUSSI
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
TRADUCTION
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 à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- OPTIONS
-
- EXEMPLES
-
- CODE DE RETOUR
-
- CONFORMITÉ AUX STANDARDS
-
- HISTORIQUE
-
- BOGUES
-
- SIGNALER DES BOGUES
-
- COPYRIGHT
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:05:59 GMT, September 19, 2025