Traitement parallèle pratique avec xargs

4 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

Bonjour, c'est Munou.

Je suis désolé pour le long délai depuis ma dernière publication, mais je suis en vie.

J'ai acheté un Ryzen 5 d'occasion et, à ma grande surprise, il avait des broches tordues, ne reconnaissant qu'une seule barrette de RAM, et d'autres incidents, mais je m'en sors tant bien que mal. J'ai réussi à obtenir une autre carte mère AM4 M-ATX à bas prix, donc je pense utiliser cette puce Ryzen pour assembler un mini PC.

xargs, un outil pratique

xargs - Wikipédia
xargs, qui existe en tant que commande UNIX, est très pratique.
Au début, je n'étais pas habitué à l'utiliser, mais plus je l'utilise, plus je découvre sa polyvalence. C'est une très bonne commande qui ne nécessite même pas l'effort d'écrire une simple boucle en une seule ligne.

Cas d'utilisation

Par exemple, supposons que vous ayez des vidéos à télécharger avec yt-dlp, et qu'elles existent ligne par ligne.

url1
url2
url3

Naturellement, si vous les passez tous en traitement parallèle en une seule fois, la charge CPU deviendra intense. Si vous voulez les exécuter deux processus à la fois, vous pouvez l'écrire comme suit :

cat url-txt | xargs -I {} -P 2 yt-dlp {}

Étonnamment, avec juste cela, vous pouvez traiter deux processus à la fois.

Décortiquons

Alors, comment cela fonctionne-t-il ?
Ce qui précède est équivalent à ce qui suit :

yt-dlp url1 ; yt-dlp url2
yt-dlp url3

En termes de mécanisme, cela signifie que la commande passée à xargs est exécutée à chaque fois pour chaque exécution.
C'est un peu comme si vous faisiez un read line et que vous le stockiez dans un tableau, n'est-ce pas ?

Que se passe-t-il sans options ?

Sans options, les arguments sont passés en bloc à la commande donnée à xargs.
Les commandes compatibles sont limitées, il semble donc préférable d'utiliser l'option -I.
Dans un cas comme celui-ci :

cat url-txt | xargs yt-dlp

Dans ce cas, cela équivaut à exécuter la commande suivante :

yt-dlp url1 url2 url3

Il semble donc préférable de traiter avec -I autant que possible, mais sans options, cela peut aussi être acceptable selon le contexte.

Cas d'utilisation 2

C'est également utile lorsque vous voulez grep ou sed uniquement certains noms de fichiers avec la commande find.

find . -name "testfile" | xargs -I {} grep "return 0" {}

De cette manière, il est possible de grep uniquement des fichiers spécifiques avec une description aussi courte.


C'est tout pour aujourd'hui.
À bientôt !

Related Posts