Maison > Article > Opération et maintenance > Explication détaillée de l'utilisation de xargs sous Linux
xargs est une commande très utile sous Linux. Elle est souvent utilisée en combinaison avec d'autres commandes et est très flexible.
xargs est un filtre pour passer des paramètres aux commandes, et c'est aussi un moyen de combiner. plusieurs commandes. Il divise un flux de données en morceaux suffisamment petits pour être traités par des filtres et des commandes. Par conséquent, cette commande est également un remplacement puissant pour les références arrière. En général, le remplacement de commandes qui utilise trop de paramètres échoue parfois. , le remplacer par xargs réussit généralement. Généralement, xargs lit les données d'un tube ou d'un stdin, mais il peut également lire les données de la sortie d'un fichier
La commande par défaut de xargs est echo. l'entrée transmise à xargs via le tube contiendra des nouvelles lignes et des espaces, mais via le traitement de xargs, les nouvelles lignes et les espaces seront remplacés par des espaces. Par exemple :
bash$ ls -l
total 0 <.>
-rwxr-xr-x 2 racine racine 4096 2009-02-23 090218.txt -rwxr-xr-x 2 racine racine 12288 2009-06-08 090607 .txtbash$ ls -l | xargs 090218.txt 090607.txt bash$ find ~/mail -type f >
./misc:User-Agent : slrn/0.9.8.1 (Linux)
./sent-mail-jul-2005 : hébergé par le projet de documentation Linux
/sent-mail-jul-2005 : (Documentation Linux. Site du projet, version rtf)
./sent-mail-jul-2005 : Objet : Critique de l'article Windows/Linux de Bozo
. p -l gzip Utilisez gzips pour compresser chaque fichier du répertoire courant, un à la fois, et invitez l'utilisateur avant chaque compression
Remarque : a L'option xargs intéressante est -n NN limite le nombre. des paramètres transmis à chaque fois.
ls | xargs -n 8 echo répertorie tous les fichiers du répertoire courant sous la forme de 8 colonnes par ligne
Remarque : une autre option utile est -0. , combiné avec find -print0 ou grep -lZ Cela permet le traitement des arguments contenant des espaces ou des guillemets
find / -type f -print0 | 🎜>
grep -rliwZ GUI / | Supprimez tous les fichiers contenant "GUI". -i signifie que le résultat de find passé à xargs est remplacé par {} -I Je pense que c'est similaire à i On peut penser que -i peut être remplacé par -I. {} -p demande de manière interactive à y de confirmer chaque exécution de la commande. -t fait écho à chaque commande avant l'exécution Il existe également des paramètres -s et -x Veuillez consulter le manuel pour plus de détails Ce qui suit est un autre exemple, nous l'espérons. pour calculer le contenu de ces fichiers : $ fichier * | grep ASCII | cut -d":" -f1 | 47853 alert_DBA102.log19 dba102_cjq0_14493.trc29053 dba102_mmnl_14497.trc154 dba102_reco_14491.trc43 dba102_rvwr_1 4518.trc77122 total (Remarque : les tâches ci-dessus peuvent également être effectuées avec la commande suivante :) $ wc -l 'file * | cut -d":" -f1 | grep ASCII | cut -d":" -f1' Cette version de xargs est utilisée pour illustrer des concepts. Linux peut accomplir la même tâche de plusieurs manières ; utilisez la méthode qui convient le mieux à votre situation. En utilisant cette méthode, vous pouvez rapidement renommer les fichiers d'un répertoire. $ ls | xargs -t -i mv {} {}.bak L'option -i indique à xargs de remplacer {} par le nom de chaque élément. L'option -t demande à xargs d'imprimer la commande avant de l'exécuter. Une autre opération très utile consiste à utiliser vi pour ouvrir un fichier à éditer : $ file * | grep ASCII | ":" -f1 | xargs viCette commande utilise vi pour ouvrir les fichiers un par un. Cette commande est très pratique lorsque vous souhaitez rechercher plusieurs fichiers et les ouvrir pour les modifier. Il dispose également de plusieurs options. La plus utile est probablement l'option -p, qui rend l'opération interactive : $ file * | grep ASCII | cut -d":" -f1 | >vi alert_DBA102.log dba102_cjq0_14493.trc dba102_mmnl_14497.trc
dba102_reco_14491.trc dba102_rvwr_14518.trc ?...
xarg ici vous demande de confirmer. Si vous appuyez sur "y", la commande est exécutée. Cette option peut s'avérer utile lorsque vous effectuez une action sur un fichier qui peut être dommageable et irrécupérable, comme sa suppression ou son écrasement.
L'option -t utilise un mode verbeux ; elle affiche les commandes à exécuter et est une option très utile lors du débogage.
Et si la sortie transmise à xargs est vide ? Considérez la commande suivante :
$ file * | grep SSSSSS | cut -d":" -f1 | dans Ici, la recherche de "SSSSSS" ne donne aucune correspondance ; donc l'entrée dans xargs est vide, comme indiqué dans la deuxième ligne (en raison de notre utilisation de l'option détaillée -t). Bien que cela puisse aider, dans certains cas, vous souhaiterez peut-être arrêter xargs s'il n'y a rien à traiter ; si c'est le cas, vous pouvez utiliser l'option -r :
$ file * | grep SSSSSS | " -f1 | xargs -t -r wc -l $
S'il n'y a rien à exécuter, la commande se termine.
Supposons que vous souhaitiez supprimer un fichier à l'aide de la commande rm (qui sera passée en argument à la commande xargs). Cependant, rm ne peut accepter qu’un nombre limité d’arguments. Que se passe-t-il si votre liste de paramètres dépasse cette limite ? L'option -n de xargs limite le nombre d'arguments dans une seule ligne de commande.
Ce qui suit montre comment limiter chaque ligne de commande à seulement deux arguments : même si cinq fichiers sont transmis à xargs ls -ltr , seuls deux fichiers sont transmis à ls -ltr à la fois.
$ fichier * | grep ASCII | cut -d":" -f1 | trc
-rw-r----- 1 oracle dba 738 10 août 19:18 dba102_cjq0_14493.trc
-rw-r--r-- 1 oracle dba 2410225 13 août 05 :31 alert_DBA102.log
ls -ltr dba102_mmnl_14497. trc dba102_reco_14491.trc
-rw-r----- 1 oracle dba 5386163 10 août 17:55 dba102_mmnl_14497.trc
-rw-r----- 1 oracle dba 6808 13 août 05:21 dba102_reco_14491.trc
ls -ltr dba102_rvwr_14518 .trc
-rw-r----- 1 oracle dba 2087 10 août 04:30 dba102_rvwr_14518.trc
En utilisant cette méthode, vous pouvez rapidement renommer les fichiers du répertoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!