NOM
xargs - Construire et exécuter des lignes de commandes à partir de
l’entrée standard
SYNOPSIS
xargs -0prtx] [-E chane-fin-de-fichier] [-e[chane-fin-de-fichier]]
[--eof[=chane-fin-de-fichier]] [--null] [-d dlimiteur] [--delimiter
dlimiteur] [-I chane-remplacement] [-i[chane-remplacement]]
[--replace[=chane-remplacement]] [-l[nombre-max-lignes]] [-L
nombre-max-lignes] [--max-lines[=nombre-max-lignes]] [-n
nombre-max-params] [--max-args=nombre-max-params] [-s
nombre-max-caractres] [--max-chars=nombre-max-caractres] [-P
nombre-max-procs] [--max-procs=nombre-max-procs] [--interactive]
[--verbose] [--exit] [--no-run-if-empty] [--arg-file=fichier]
[--show-limits] [--version] [--help] [commande [paramtres_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 un antislash) ou par des sauts de ligne
depuis l’entrée standard, et exécute une ou plusieurs fois la commande
(/bin/echo par défaut) en utilisant les paramtres_initiaux suivis des
paramètres lus depuis l’entrée standard. Les lignes blanches en entrée
sont ignorées.
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 l’on utilise cette
option, il faut s’assurer que le programme qui produit l’entrée pour
xargs utilise aussi un caractère nul 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
--arg-file=fichier
-a fichier
Lire les données depuis fichier plutôt que depuis l’entrée
standard. 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.
--null
-0 Les noms des fichiers d’entrée sont terminés par un caractère
nul au lieu d’une espace blanche, et les apostrophes, guillemets
et antislashs 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
blanches, des marques de protection ou des antislashs. L’option
-print0 de GNU find produit une sortie convenant à ce mode.
--delimiter=dlimiteur
-d dlimiteur
Les éléments en entrée sont terminés par le caractère indiqué.
Les apostrophes, les antislashs n’ont pas de signification
particulière ; chaque caractère en entrée est pris
littéralement. Désactive la chaîne de fin de fichier qui est
traitée comme n’importe quel autre paramètre. Ceci peut être
utilisé lorsque l’entrée ne consiste qu’en des éléments
simplement séparés par un caractère de saut de ligne, bien qu’il
soit la plupart du temps préférable de concevoir votre programme
de façon à ce qu’il utilise --null lorsque c’est possible. Le
séparateur indiqué peut être un caractère unique, un caractère
de déspécification de style C tel que \n, ou un code de
déspécification octal ou hexadécimal. Les codes de
déspécification octaux ou hexadécimaux sont interprétés de la
même manière qu’avec la commande printf. Les caractères
multi-octet ne sont pas gérés.
-E chane-fin-de-fichier
Définir la chaîne de fin de fichier à chane-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.
--eof[=chane-fin-de-fichier]
-e[chane-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 chane-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.
--help Afficher un résumé des options de xargs et quitter.
-I chane-remplacement
Remplacer les occurrences de chane-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. Implique -x et -L 1.
--replace[=chane-remplacement]
-i[chane-remplacement]
Cette option est un synonyme de -Ireplace-str si
chane-remplacement est indiquée et de -I{} sinon. Cette option
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
logique de se poursuivre sur la ligne suivante. Implique -x.
--max-lines[=nombre_max_lignes]
-l[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’il a été remplacé par -L dans la norme POSIX.
--max-args=nombre-max-param
-n 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.
--interactive
-p 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.
--no-run-if-empty
-r 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.
--max-chars=nombre-max-caractres
-s nombre-max-caractres
Utiliser au plus nombre-max-caractres caractères par ligne de
commande, ce qui inclut la commande et les paramètres initiaux,
ainsi que les caractères nuls 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 exec, moins la
taille de l’environnement, moins 2048 octets pour les entê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).
--verbose
-t Afficher la ligne de commande sur la sortie d’erreur standard
avant de l’exécuter.
--version
Afficher le numéro de version de xargs et quitter.
--show-limits
Afficher les limites de la longueur de la ligne de commande
telle qu’imposée par le système d’exploitation, le choix dans
xargs de la taille du tampon et l’option -s. Redirigez /dev/null
dans l’entrée (en indiquant éventuellement --no-run-if-empty) si
vous voulez qu’xargs ne fasse rien.
--exit
-x Se terminer si la taille (voyez l’option -s) est dépassée.
--max-procs=nombre-max-procs
-P nombre-max-procs
Exécuter jusqu’à nombre-max-procs processus simultanément (1 par
défaut). Si nombre-max-procs vaut 0, xargs exécutera
simultanément autant de processus que possible. Utilisez
l’option -n avec -P ; sinon, il est fort possible qu’un seul
exec soit effectué.
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
Rechercher les fichiers nommés noyau dans ou à l’intérieur du
répertoire /tmp et 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ée une liste compacte de tous les utilisateurs sur le système.
xargs sh -c ’emacs "$@" < /dev/tty’ emacs
Lance le nombre minimum de copie d’Emacs nécessaire à l’édition
successives des fichiers listés sur l’entrée standard de xargs. Cet
exemple produit le même résultat que l’option -o de BSD, mais d’une
manière plus flexible et portable.
VALEURS 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 une valeur de retour
de 255
125 si la commande a été tuée par un signal
126 si la commande ne peut ê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, 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.
The POSIX standard allows implementations to have a limit on the size
of arguments to the exec functions. This limit could be as low as 4096
bytes including the size of the environment. For scripts to be
portable, they must not rely on a larger value. However, I know of no
implementation whose actual limit is that small. The --show-limits
option can be used to discover the actual limits in force on the
current system.
VOIR AUSSI
find(1), locate(1), locatedb(5), updatedb(1),fork(2), execvp(3),
Finding Files (en ligne dans Info, ou en version imprimée)
BOGUES
L’option -L est incompatible avec l’option -I, mais elle ne le devrait
peut-être pas.
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. Ceci signifie qu’il y a une limite maximum
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é 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.
La meilleure manière de signaler un bogue est d’utiliser le formulaire
sur http://savannah.gnu.org/bugs/?group=findutils. Vous pourrez ainsi
suivre l’évolution de la résolution de votre problème. Les autres
commentaires concernant xargs(1) et le paquet findutils en général
peuvent être envoyé à la liste de diffusion bug-findutils. Pour vous
abonner à cette liste, veuillez envoyer un courriel à
bug-findutils-request@gnu.org.
TRADUCTION
Cette page de manuel a été traduite par Frédéric Delanoy <delanoy_f AT
yahoo DOT com> en 2002. La version présente dans Debian est dorénavant
maintenue par Jean-Luc Coulon (f5ibh) <jean-luc DOT coulon AT wanadoo
DOT fr> et les membres de la liste <debian-l10n-french AT lists DOT
debian DOT org>. Veuillez signaler toute erreur de traduction par un
rapport de bogue sur le paquet manpages-fr-extra.