Remplacer certains fichiers par lot dans une arborescence

Petite astuce et pense bête pour modifier un certain nombre de fichiers dans une arborescence (mais pas forcément le même répertoire) et qui ont le même nom.
Par exemple, je souhaite remplacer tous les fichiers welcome.jpg situés n’importe où dans une arborescence quelconque de /home par le fichier /tmp/new_welcome.jpg.

Voici la commande :
find /home -name welcome.jpg -print0 | xargs -0 -I cp /tmp/new_welcome.jpg {}

En fait, tout réside dans la force du | (caractère aussi appelé pipe), et des fonctions find et xargs.
Le pipe permet d’utiliser le résultat d’exécution d’un programme (la sortie) sur l’entrée standard d’un autre programme.

Ainsi, ici dans notre cas, on exécute la commande find avec ses paramètres qui va rechercher les fichiers nommés welcome.jpg dans l’arborescence et les listés sur la sortie standard.
Cette sortie standard est ensuite récupérée sur l’entrée standard de la commande xargs. La commande xargs permet d’utiliser des éléments de l’entrée standard pour les réinjecter dans d’autres commandes.
Par exemple, ici, on va construire une ligne de commande cp (commande de copie) pour remplacer tous les fichiers de l’entrée standard de xargs par le fichier /tmp/new_welcome.jpg.