xargs

Utilisation de xargs dans un shell UNIX

Syntaxe

xarg est une commande UNIX puissante qui permet de récupérer les arguments passés par la commande précédente. Il permet d'éviter des structures lourdes comme :

[commande] | while read param
do
[traitement]
done

A la place, nous avons quelque chose de plus simple, de plus condensé :

[commande] | xargs [traitement]

Exemples

cp

Copier la liste des fichiers .txt dans un répertoire :

ls -1 ${repertoire_source}/*.txt | xargs -i -t cp {} ${repertoire_cible}

Copier la liste des fichiers .txt dans un répertoire cible depuis un répertoire relatif :

ls -1 ${repertoire_source}/*.txt | xargs -i -t cp {} ${repertoire_cible}

mv

Renommer tous les fichiers *.txt d'un répertoire :

ls -1 ${repertoire}/*.txt | xargs -i -t mv {} {}.csv

rm

Supprimer tous les fichiers *.txt d'un répertoire :

ls -1 ${repertoire}/*.txt | xargs rm -f

Dans certains cas, lorsque le nombre de fichiers à supprimer est trop important, le commande rm retourne une erreur :

/bin/rm: Argument list too long.

Dans ce cas, xargs permet de résoudre le problème en passant, par exemple, par find :

find . -type f -name "motif" -print | xargs rm -f

basename

La commande basename n'apprécie pas trop les tubes (pipes). Pour remédier à ce problème, après un ls, par exemple, il faut :

ls -1 ${repertoire}/*.txt | xargs -n1 basename

kill

Tuer tous les processus contenant un motif donné :

ps -ax | grep "${motif}" | grep -v "grep" | awk '{print $1}'| xargs kill -9

ls

Lister les informations des fichiers et répertoire contenant un motif donné :

find . -type f -name "*.txt" -print | xargs ls -l -D %Y-%m-%d

Voir une application : générer un sitemap automatiquement