Skip to main content

Exemples d'utilisation de la commande "xargs"

Commandes de base Linux - Ep39 - Gestion des droits d'accès- Umask- part7 (Mai 2024)

Commandes de base Linux - Ep39 - Gestion des droits d'accès- Umask- part7 (Mai 2024)
Anonim

La commande xargs est généralement utilisée dans une ligne de commande où la sortie d'une commande est transmise en tant qu'argument d'entrée à une autre commande.

Dans de nombreux cas, aucune commande spéciale telle que xargs n'est nécessaire pour cela, car les opérateurs "pipe" et "redirection" effectuent le même type de transaction. Cependant, il existe parfois des problèmes avec le mécanisme de base de la tuyauterie et de la redirection, par exemple, si les arguments contiennent des espaces, ce que xargs surmonte.

De plus, xargs exécute la commande spécifiée à plusieurs reprises, si nécessaire, pour traiter tous les arguments qui lui sont donnés. En fait, vous pouvez spécifier le nombre d'arguments à lire dans le flux d'entrée standard chaque fois que xargs exécute la commande spécifiée.

En général, la commande xargs doit être utilisée si le résultat d'une commande doit être utilisé avec les options ou les arguments d'une deuxième commande vers laquelle les données sont diffusées (à l'aide de l'opérateur de canal "|"). Une tuyauterie normale est suffisante si les données sont destinées à être l'entrée (standard) de la deuxième commande.

Par exemple, si vous utilisez la commande ls pour générer une liste de noms de fichiers et de répertoires, puis dirigez cette liste vers la commande xargs exécutant echo, vous pouvez spécifier le nombre de noms de fichiers ou de noms de dossiers traités par echo à chaque itération, comme suit: :

ls | xargs -n 5 echo

Dans ce cas, echo reçoit cinq noms de fichier ou de répertoire à la fois. Puisque echo ajoute un caractère de nouvelle ligne à la fin, cinq noms sont écrits sur chaque ligne.

Si vous exécutez une commande renvoyant un nombre important et imprévisible d'éléments (noms de fichiers, par exemple) qui sont transmis à une autre commande pour traitement ultérieur, il est conseillé de contrôler le nombre maximal d'arguments reçus par la deuxième commande afin d'éviter toute surcharge et tout blocage.

La ligne de commande suivante partitionne le flux de noms de fichiers généré en recherchant les groupes de 200 avant de passer à la commande cp, qui les copie dans le répertoire. sauvegarde annuaire.

trouver ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

L'élément "./" de la commande find spécifie le répertoire en cours de recherche. L'argument "-type f" limite la recherche aux fichiers, et l'indicateur "-name" * .txt "filtre davantage tout ce qui ne possède pas l'extension" .txt ". -je drapeau dans xargs signale que le {} La notation représente chaque nom de fichier de la vapeur.

La commande suivante trouve les fichiers nommés core dans ou sous le répertoire / tmp et les supprime.

find / tmp -name core -type f -print | xargs / bin / rm -f

Notez que cela ne fonctionnera pas correctement s'il existe des noms de fichiers contenant des nouvelles lignes, des guillemets simples ou doubles ou des espaces. La version suivante traite les noms de fichiers de manière à ce que les noms de fichiers ou de répertoires contenant des guillemets simples ou doubles, des espaces ou des nouvelles lignes soient correctement gérés.

find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

À la place du -je option vous pouvez également utiliser le -JE indicateur qui spécifie la chaîne remplacée par la ligne d'entrée dans les arguments de la commande, comme dans cet exemple:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

La chaîne de remplacement est définie comme "{}". Cela signifie que toutes les occurrences de "{}" dans les arguments de la commande sont remplacées par l'élément d'entrée transmis aux arguments via l'opération de canal. Cela vous permet de placer les éléments d'entrée à des positions spécifiques dans les arguments de la commande à exécuter (de manière répétée).