La commande xargs est un outil puissant qui permet de construire et d'exécuter des commandes à partir de résultats lus sur l'entrée standard. Elle est particulièrement utile pour chaîner des commandes avec des Pipes et traiter de grandes quantités de données.
xargs lit des données depuis l'entrée standard (stdin), puis les utilise comme arguments pour exécuter une commande. Sans argument, il exécute echo par défaut.
# Syntaxe de basecommande | xargs commande_targetTrouver et supprimer des fichiers spécifiques avec find :
find ~/documents -name "*.tmp" | xargs rmIci, xargs prend chaque résultat de find et le passe comme argument à rm.
Par défaut, xargs utilise les espaces et sauts de ligne comme délimiteurs. Vous pouvez spécifier un autre délimiteur avec -d :
echo "f1.txt,f2.txt,f3.txt" | xargs -d ',' rmPar défaut, xargs passe autant d'arguments que possible sur une seule ligne. Utilisez -n pour limiter :
# Exécuter rm avec 1 fichier à la foisfind ~/documents -name "*.tmp" | xargs -n 1 rmSi un nom de fichier contient des espaces, xargs peut mal l'interpréter. La solution est d'utiliser find -print0 et xargs -0 :
# Traitement sécurisé des noms de fichiers avec espacesfind ~/documents -name "*.txt" -print0 | xargs -0 rmPar défaut, les arguments sont ajoutés à la fin de la commande. Utilisez -I pour spécifier où insérer les arguments :
# Copier chaque fichier vers un répertoirefind ~/documents -name "*.pdf" | xargs -I {} cp {} ~/backup/Le symbole {} est remplacé par chaque argument lu.
# Créer une archive pour chaque fichier trouvéls *.log | xargs -I {} tar -czf {}.tar.gz {}# Exécuter un script personnalisé sur chaque fichierfind ~/documents -type f | xargs -I {} bash -c 'echo "Traitement de: {}"'Utilisez -p pour afficher la commande et demander confirmation :
find ~/documents -name "*.tmp" | xargs -p rmUtilisez -t pour afficher les commandes exécutées (mode verbose) :
find ~/documents -name "*.tmp" | xargs -t rmUtilisez -s pour limiter la longueur totale de la ligne de commande :
# Limiter à 500 caractères par lignefind ~/documents -name "*.txt" | xargs -s 500 ls -l# Changer les permissions de plusieurs fichiersfind ~/documents -name "*.sh" | xargs chmod 755# Compter les lignes de plusieurs fichiersfind ~/documents -name "*.py" | xargs wc -l# Envoyer un email pour chaque résultat de grepgrep -r "error" /var/log | xargs -I {} mail -s "Alerte" admin@example.com| Option | Description |
|---|---|
-n N | Limiter à N arguments par commande |
-d CAR | Utiliser CAR comme délimiteur |
-0 | Traiter les NUL comme délimiteurs (avec find -print0) |
-I {} | Remplacer {} par les arguments |
-p | Demander confirmation avant exécution |
-t | Afficher la commande avant exécution |
-s N | Limiter la longueur de ligne à N caractères |
.log de votre répertoire personnel et affichez leur taille avec ls -lh en utilisant xargs.find et xargs pour compter le nombre de lignes dans tous les fichiers .txt d'un répertoire.xargs -I pour copier chaque fichier d'un répertoire vers un autre.xargs -p pour voir comment fonctionne la confirmation interactive.xargs est un outil essentiel pour tout administrateur Linux. Il permet de chaîner des commandes de manière flexible et puissante, transformant les résultats d'une commande en arguments pour une autre. Combiné avec find et les Pipes, il devient un outil de manipulation de fichiers très puissant.