Quand vous devez traiter des centaines de fichiers, convertir des images en
masse ou exécuter des scripts sur plusieurs serveurs, lancer les tâches une
par une est trop lent. GNU Parallel permet d’exécuter plusieurs commandes
simultanément, en exploitant tous les cœurs de votre CPU. Là où
xargs traite séquentiellement, parallel
répartit la charge et accélère drastiquement vos traitements batch.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Exécuter des commandes en parallèle avec
::: - Contrôler le nombre de jobs avec
-j - Utiliser les placeholders (
{},{.},{/}) - Gérer les fichiers avec espaces et caractères spéciaux
- Surveiller la progression et gérer les erreurs
- Combiner
parallelavecfindet d’autres commandes
La commande parallel dans l’écosystème Linux
Section intitulée « La commande parallel dans l’écosystème Linux »GNU Parallel est l’évolution logique de xargs pour les traitements en masse. Voici comment il se positionne :
| Commande | Spécialité | Quand l’utiliser |
|---|---|---|
parallel | Exécution parallèle | Traitement en masse, performance maximale |
xargs | Exécution séquentielle | Commandes simples, une par une |
make -j | Build parallèle | Compilation de projets |
& / wait | Jobs background | Quelques tâches indépendantes |
Avantages de parallel sur xargs :
- Exécution réellement parallèle (pas juste -P)
- Barre de progression (—bar, —eta)
- Gestion des erreurs avancée (—halt)
- Placeholders riches (
{.},{/},{#}…) - Exécution sur serveurs distants (-S)
Comprendre GNU Parallel en 2 minutes
Section intitulée « Comprendre GNU Parallel en 2 minutes »🧠 Modèle mental — Comment fonctionne parallel
parallel = Pour chaque argument → Lancer N commandes simultanément → Collecter les résultats
Points clés
- parallel lit les arguments et lance plusieurs instances de la commande simultanément
- Par défaut, parallel lance autant de jobs que de cœurs CPU
- {} représente l'argument courant, {.} sans extension, {/} nom de base
- ::: passe des arguments inline, :::: lit depuis un fichier
- L'ordre des sorties n'est PAS garanti (exécution parallèle)
Règles d'or
Vocabulaire essentiel
- :::
- Passe des arguments directement en ligne de commande
- ::::
- Lit les arguments depuis un fichier
- {}
- Placeholder pour l'argument courant
- -j N
- Nombre de jobs en parallèle (défaut: nb CPU)
- --dry-run
- Affiche les commandes sans les exécuter
- --bar
- Affiche une barre de progression
📚 Pour aller plus loin — 12 options avancées
- {.}
- Argument sans extension
- {/}
- Nom de base (sans chemin)
- {//}
- Chemin du répertoire
- {/.}
- Nom de base sans extension
- {#}
- Numéro du job (séquence)
- {%}
- Numéro du slot (worker)
- --colsep
- Séparateur de colonnes pour plusieurs champs
- --halt
- Comportement sur erreur (now,fail=1...)
- --results
- Enregistre stdout/stderr dans un dossier
- --eta
- Affiche le temps restant estimé
- --null
- Arguments séparés par NUL (pour find -print0)
- -S
- Exécution sur serveurs distants (SSH)
Contrairement à xargs qui passe les arguments à une seule instance de
commande, parallel lance N instances simultanées (N = nombre de cœurs CPU
par défaut).
Syntaxe complète
Section intitulée « Syntaxe complète »parallel [options] commande ::: arguments # Arguments inlineparallel [options] commande :::: fichier.txt # Arguments depuis fichiercat liste.txt | parallel [options] commande {} # Arguments depuis stdinOptions principales :
| Option | Description | Exemple |
|---|---|---|
-j N | N jobs en parallèle (défaut: nb CPU) | parallel -j 4 ... |
--dry-run | Affiche sans exécuter | parallel --dry-run rm ... |
--bar | Barre de progression | parallel --bar cmd ... |
--halt | Comportement sur erreur | --halt now,fail=1 |
-k | Préserve l’ordre des sorties | parallel -k echo ... |
Les 3 parties d’une commande parallel
Section intitulée « Les 3 parties d’une commande parallel »| Partie | Question | Exemples | Obligatoire ? |
|---|---|---|---|
| Source | D’où viennent les arguments ? | :::, ::::, stdin | ✅ Oui |
| Commande | Quelle commande exécuter ? | gzip {}, convert | ✅ Oui |
| Contrôle | Combien de parallélisme ? | -j 4, --bar | ❌ Non (défauts) |
Les placeholders : le cœur de parallel
Section intitulée « Les placeholders : le cœur de parallel »| Placeholder | Signification | Exemple (/path/photo.jpg) |
|---|---|---|
{} | Argument complet | /path/photo.jpg |
{.} | Sans extension | /path/photo |
{/} | Nom de base (sans chemin) | photo.jpg |
{//} | Chemin du répertoire | /path |
{/.} | Nom de base sans extension | photo |
{#} | Numéro du job (1, 2, 3…) | 1 |
{%} | Numéro du slot (worker) | 2 |
Exemple de conversion :
# Convertir photo.jpg → photo.pngparallel convert {} {.}.png ::: *.jpg
# Résultat pour photo.jpg :# convert photo.jpg photo.pngLes sources d’arguments
Section intitulée « Les sources d’arguments »| Source | Syntaxe | Exemple |
|---|---|---|
| Inline | ::: arg1 arg2 | parallel echo ::: a b c |
| Fichier | :::: fichier.txt | parallel wget :::: urls.txt |
| Stdin | cmd | parallel | find . | parallel gzip |
| Multi-colonnes | --colsep | parallel --colsep ',' cp {1} {2} |
Contrôler le parallélisme
Section intitulée « Contrôler le parallélisme »# Défaut : autant de jobs que de cœurs CPUparallel gzip ::: *.log
# Limiter à 4 jobs simultanésparallel -j 4 gzip ::: *.log
# Un seul job (séquentiel, pour debug)parallel -j 1 gzip ::: *.log
# Autant de jobs que d'arguments (attention !)parallel -j 0 gzip ::: *.log⚠️ Attention : trop de jobs parallèles peut saturer le système (CPU,
mémoire, I/O disque). Commencez par -j 4 et ajustez.
Gestion des fichiers avec espaces
Section intitulée « Gestion des fichiers avec espaces »Le piège classique : les fichiers avec espaces sont mal découpés.
# ❌ DANGER : "mon fichier.jpg" devient "mon" et "fichier.jpg"ls *.jpg | parallel echo {}
# ✅ CORRECT : utiliser find -print0 + --nullfind . -name "*.jpg" -print0 | parallel --null echo {}La combinaison find -print0 | parallel --null est le pattern sécurisé pour
tous les traitements de fichiers.
Erreurs typiques (et solutions)
Section intitulée « Erreurs typiques (et solutions) »| Erreur | Cause | Solution |
|---|---|---|
| Fichiers mal découpés | Espaces dans les noms | find -print0 | parallel --null |
| Sorties mélangées | Exécution parallèle | Ajouter -k ou --line-buffer |
| Système saturé | Trop de jobs | Limiter avec -j 4 |
| Fichiers supprimés par erreur | Pas de test | TOUJOURS --dry-run d’abord |
| SSH demande mot de passe | Clé non configurée | ssh-copy-id user@serveur |
Installation
Section intitulée « Installation »GNU Parallel n’est pas toujours installé par défaut :
# Debian/Ubuntusudo apt install parallel
# CentOS/RHEL/Fedorasudo dnf install parallel
# macOS (Homebrew)brew install parallel
# Vérificationparallel --versionLab : Pratiquez parallel
Section intitulée « Lab : Pratiquez parallel »🧪 Lab pratique — 15 min
Prépare ton environnement
Crée des fichiers de test pour pratiquer parallel (images, logs, données).
# Créer le lab
mkdir -p ~/parallel-lab/{images,logs,data}
cd ~/parallel-lab
# Fichiers images simulés
for i in {1..10}; do
echo "image $i data" > images/photo_$i.jpg
done
# Fichiers avec espaces
echo "data 1" > images/"mon fichier 1.jpg"
echo "data 2" > images/"photo vacances 2024.jpg"
# Fichiers de logs
for i in {1..5}; do
echo "Log content $i" > logs/app_$i.log
done
# Liste de serveurs
cat > serveurs.txt << 'EOF'
serveur1
serveur2
serveur3
EOF
# Liste d'URLs
cat > urls.txt << 'EOF'
https://example.com/file1.txt
https://example.com/file2.txt
https://example.com/file3.txt
EOF
# Fichier CSV pour tests multi-colonnes
cat > data/batch.csv << 'EOF'
fichier1,output1
fichier2,output2
fichier3,output3
EOF
echo "✅ Lab créé dans ~/parallel-lab"
ls -la ~/parallel-lab/ 🧹 Nettoyage après le lab
rm -rf ~/parallel-lab Étapes du TP
Première commande parallèle
Exécute echo sur plusieurs arguments en parallèle avec :::
parallel echo ::: ??? ??? ??? Affiche un, deux, trois, quatre (ordre variable)
💡 Indice
::: sépare la commande des arguments
✅ Voir la solution
parallel echo ::: un deux trois quatre Utiliser le placeholder {}
Affiche "Traitement de X" pour chaque fichier image.
ls ~/parallel-lab/images/*.jpg | parallel echo "Traitement de ???" Traitement de /home/.../photo_1.jpg (pour chaque fichier)
💡 Indice
{} représente l'argument courant
✅ Voir la solution
ls ~/parallel-lab/images/*.jpg | parallel echo "Traitement de {}" Tester sans exécuter (--dry-run)
Vérifie les commandes de suppression qui seraient exécutées.
ls ~/parallel-lab/logs/*.log | parallel ??? rm {} Affiche rm /path/app_1.log... sans supprimer
💡 Indice
--dry-run pour simuler
✅ Voir la solution
ls ~/parallel-lab/logs/*.log | parallel --dry-run rm {} Limiter le parallélisme
Lance 2 jobs maximum en parallèle.
parallel ??? 2 sleep 1 ::: {1..6} 6 sleep exécutés, mais 2 à la fois (≈3 secondes total)
💡 Indice
-j N pour limiter les jobs
✅ Voir la solution
parallel -j 2 sleep 1 ::: {1..6} Transformer des fichiers (placeholder {.})
Simule une conversion d'images jpg vers png (affiche la commande).
ls ~/parallel-lab/images/*.jpg | parallel --dry-run echo convert {} ???.png convert photo_1.jpg photo_1.png (sans extension dans la sortie)
💡 Indice
{.} = argument sans extension
✅ Voir la solution
ls ~/parallel-lab/images/*.jpg | parallel --dry-run echo convert {} {.}.png Gérer les fichiers avec espaces
Traite les fichiers avec espaces dans leur nom.
find ~/parallel-lab/images -name "*.jpg" -print0 | parallel ??? echo "Fichier: {}" Fichier: mon fichier 1.jpg (espaces préservés)
💡 Indice
--null pour les entrées séparées par NUL
✅ Voir la solution
find ~/parallel-lab/images -name "*.jpg" -print0 | parallel --null echo "Fichier: {}" Afficher la progression
Lance des tâches avec une barre de progression.
parallel ??? sleep 0.5 ::: {1..10} Barre de progression pendant l'exécution
💡 Indice
--bar pour la barre de progression
✅ Voir la solution
parallel --bar sleep 0.5 ::: {1..10} Arrêt sur erreur
Configure parallel pour s'arrêter dès la première erreur.
parallel ??? 'test {} = 3 && exit 1; echo {}' ::: {1..5} S'arrête dès que le job 3 échoue
💡 Indice
--halt now,fail=1 pour stopper sur erreur
✅ Voir la solution
parallel --halt now,fail=1 'test {} = 3 && exit 1; echo {}' ::: {1..5} Les patterns essentiels
Section intitulée « Les patterns essentiels »Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.
Exécution parallèle basique Base Lancer la même commande sur plusieurs arguments.
parallel gzip ::: *.log
parallel commande ::: arg1 arg2 arg3 parallel gzip ::: *.log -
commande— La commande à exécuter -
:::— Séparateur de la liste d'arguments
Depuis l'entrée standard Base Lire les arguments depuis un pipe.
find . -name "*.jpg" | parallel convert {} {.}.png
cat liste.txt | parallel commande {} find . -name "*.jpg" | parallel convert {} {.}.png -
{}— Placeholder pour l'argument courant
Limiter le parallélisme Base Contrôler le nombre de jobs simultanés.
parallel -j 4 gzip ::: *.log
parallel -j N commande ::: arguments parallel -j 4 gzip ::: *.log -
-j N— Nombre maximum de jobs (défaut: nb CPU) -
-j 0— Autant de jobs que d'arguments -
-j +0— nb CPU jobs par machine
Mode simulation Base Vérifier les commandes avant exécution.
parallel --dry-run rm ::: *.bak
parallel --dry-run commande ::: arguments parallel --dry-run rm ::: *.bak -
--dry-run— Affiche sans exécuter
Transformation de fichiers Inter. Convertir des fichiers en changeant leur extension.
parallel ffmpeg -i {} {.}.mp3 ::: *.wav
parallel commande {} {.}.new_ext ::: fichiers parallel ffmpeg -i {} {.}.mp3 ::: *.wav -
{.}— Fichier sans extension -
{/}— Nom de base (sans chemin) -
{//}— Chemin du répertoire
Fichiers avec espaces (sécurisé) Inter. Gérer les noms de fichiers avec espaces ou caractères spéciaux.
find . -name "*.jpg" -print0 | parallel --null convert {} {.}.png
find . -print0 | parallel --null commande {} find . -name "*.jpg" -print0 | parallel --null convert {} {.}.png -
-print0— find sépare par NUL au lieu de \n -
--null— parallel lit les entrées NUL-terminated
Suivi de progression Inter. Afficher l'avancement des tâches.
parallel --bar --eta gzip ::: *.log
parallel --bar commande ::: arguments parallel --bar --eta gzip ::: *.log -
--bar— Barre de progression visuelle -
--eta— Temps restant estimé -
--progress— Progression textuelle
Gestion des erreurs Inter. Contrôler le comportement quand une tâche échoue.
parallel --halt now,fail=1 ./script.sh ::: *.txt
parallel --halt now,fail=1 commande ::: arguments parallel --halt now,fail=1 ./script.sh ::: *.txt -
now,fail=1— Stoppe dès la 1ère erreur -
soon,fail=20%— Stoppe si >20% d'erreurs -
never— Continue toujours (défaut)
Arguments multi-colonnes Avancé Utiliser plusieurs champs par ligne.
parallel --colsep ',' cp {1} {2} :::: batch.csv
parallel --colsep ',' commande {1} {2} :::: fichier.csv parallel --colsep ',' cp {1} {2} :::: batch.csv -
--colsep— Séparateur de colonnes -
{1}, {2}— Référence aux colonnes -
::::— Lit depuis un fichier
Exécution sur serveurs distants Avancé Distribuer les tâches sur plusieurs machines.
parallel -S srv1,srv2,srv3 hostname ::: {1..10}
parallel -S serveur1,serveur2 commande ::: arguments parallel -S srv1,srv2,srv3 hostname ::: {1..10} -
-S— Liste des serveurs SSH -
--sshlogin— user@host pour connexion -
--transferfile— Transfère les fichiers avant
Aucune recette ne correspond à votre recherche.
Les pièges à éviter
Section intitulée « Les pièges à éviter »Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.
Pas de test avant rm/mv parallel rm ::: *.bak — supprime immédiatement
Danger
parallel rm ::: *.bak — supprime immédiatement
parallel --dry-run rm ::: *.bak # Puis sans --dry-run Fichiers avec espaces ls *.jpg | parallel echo {} — échoue sur "mon fichier.jpg"
Danger
ls *.jpg | parallel echo {} — échoue sur "mon fichier.jpg"
find . -name "*.jpg" -print0 | parallel --null echo {} Conflits d'écriture fichier parallel "cat {} >> output.txt" ::: *.log — corruption
Danger
parallel "cat {} >> output.txt" ::: *.log — corruption
parallel "cat {} > {}.out" ::: *.log && cat *.out > output.txt Surcharge système parallel -j 100 gzip ::: *.log — trop de jobs
Attention
parallel -j 100 gzip ::: *.log — trop de jobs
parallel -j 4 gzip ::: *.log Sorties entremêlées Plusieurs jobs affichent en même temps — lignes mélangées
Attention
Plusieurs jobs affichent en même temps — lignes mélangées
parallel --line-buffer commande ::: args SSH sans clé configurée parallel -S serveur commande — demande mot de passe
Attention
parallel -S serveur commande — demande mot de passe
ssh-copy-id user@serveur # Puis relancer parallel Guillemets mal gérés parallel echo "File: {}" ::: *.txt — interprétation shell
Attention
parallel echo "File: {}" ::: *.txt — interprétation shell
parallel echo 'File: {}' ::: *.txt Ordre des sorties non garanti parallel echo ::: 1 2 3 4 5 — affiche dans un ordre aléatoire
Info
parallel echo ::: 1 2 3 4 5 — affiche dans un ordre aléatoire
parallel -k echo ::: 1 2 3 4 5 Exercices progressifs
Section intitulée « Exercices progressifs »Voici 8 exercices pour progresser de débutant à expert. Les solutions sont disponibles dans le Lab ci-dessus.
Niveau Fondations (1-3)
Section intitulée « Niveau Fondations (1-3) »- Premiers pas avec :::: Affiche les nombres de 1 à 5 en parallèle
- Compression parallèle: Compresse tous les fichiers .log avec gzip
- Mode simulation: Teste —dry-run avant de supprimer des fichiers
Niveau Composition (4-5)
Section intitulée « Niveau Composition (4-5) »- Limiter le parallélisme: Lance 6 sleep avec seulement 2 jobs à la fois
- Conversion de fichiers: Simule la conversion jpg → png avec
{.}
Niveau Industrialisation (6-7)
Section intitulée « Niveau Industrialisation (6-7) »- Fichiers avec espaces: Utilise find -print0 | parallel —null
- Multi-colonnes CSV: Traite un fichier CSV avec —colsep
Niveau Sécurité (8)
Section intitulée « Niveau Sécurité (8) »- Gestion des erreurs: Configure —halt pour stopper à la première erreur
Dépannage
Section intitulée « Dépannage »🔧 Quand ça ne marche pas
Méthodes de debug
Voir les commandes sans exécuter
Vérifier ce qui sera lancé.
parallel --dry-run commande ::: arguments Mode verbose
Afficher chaque commande avant exécution.
parallel --verbose commande ::: arguments Tester avec echo
Remplacer la commande par echo pour debug.
parallel echo "Je ferais: cmd {}" ::: args Limiter à un seul job
Exécuter séquentiellement pour isoler les problèmes.
parallel -j 1 commande ::: arguments Erreurs fréquentes
parallel: Warning: Input is read from the terminal
- Pas d'entrée fournie (ni pipe, ni :::)
- parallel attend des données sur stdin
- Vérifier que ::: ou pipe est présent
- Taper Ctrl+D pour terminer si bloqué
Ajouter ::: avec arguments ou utiliser un pipe
parallel echo ::: test /bin/bash: commande: command not found
- La commande n'existe pas ou n'est pas dans le PATH
- Chemin incorrect vers le script
- Vérifier avec which commande
- Utiliser le chemin absolu
Corriger le nom de la commande ou utiliser le chemin complet
which commande || echo "Commande introuvable" Permission denied
- Fichier non exécutable
- Droits insuffisants sur le répertoire
- Vérifier les permissions avec ls -la
- Tester avec un seul fichier
chmod +x pour les scripts, vérifier les droits
chmod +x script.sh && parallel ./script.sh ::: args ssh: connect to host X: Connection timed out
- Serveur injoignable
- Pare-feu bloque SSH
- Nom de serveur incorrect
- Tester avec ssh serveur hostname
- Vérifier la connectivité réseau
Vérifier le réseau et la configuration SSH
ssh serveur echo "OK" Cheatsheet
Section intitulée « Cheatsheet » 📋
Cheatsheet
📝 Syntaxe :
parallel commande ::: arg1 arg2 arg3 Arguments en ligne de commande cat liste | parallel commande {} Arguments depuis stdin parallel commande :::: fichier.txt Arguments depuis un fichier parallel --colsep "," cmd {1} {2} :::: data.csv Arguments multi-colonnes ⚙️ Options
-j N | N jobs en parallèle (défaut: nb CPU) | parallel -j 4 gzip ::: *.log |
--dry-run | Affiche sans exécuter | parallel --dry-run rm ::: *.bak |
--verbose | Affiche chaque commande | parallel --verbose cmd ::: args |
-k / --keep-order | Préserve l'ordre des sorties | parallel -k echo ::: 1 2 3 |
--bar | Barre de progression | parallel --bar cmd ::: {1..100} |
--eta | Temps restant estimé | parallel --eta cmd ::: args |
--halt now,fail=1 | Stoppe à la première erreur | parallel --halt now,fail=1 cmd ::: args |
--results dir/ | Sauvegarde stdout/stderr | parallel --results out/ cmd ::: args |
--null | Entrées séparées par NUL | find -print0 | parallel --null cmd |
⚡ Actions
{} | Argument complet | echo {} |
{.} | Sans extension | convert {} {.}.png |
{/} | Nom de base (sans chemin) | echo {/} |
{//} | Chemin du répertoire | mkdir -p {//}/out |
{/.} | Nom de base sans extension | echo {/.} |
{#} | Numéro du job (1, 2, 3...) | echo "Job {#}: {}" |
{%} | Numéro du slot (worker) | echo "Slot {%}: {}" |
{1}, {2} | Colonnes (avec --colsep) | cp {1} {2} |
🔗 Composition
find -print0 | parallel --null | Fichiers avec espaces (sécurisé) | find . -name "*.jpg" -print0 | parallel --null convert {} {.}.png |
parallel -S srv1,srv2 cmd | Exécution sur serveurs distants | parallel -S srv1,srv2 hostname ::: {1..10} |
parallel "cmd1 && cmd2" | Chaîner des commandes | parallel "gzip {} && mv {}.gz backup/" |
Cas d’usage avancés
Section intitulée « Cas d’usage avancés »Conversion de fichiers en masse
Section intitulée « Conversion de fichiers en masse »# Convertir toutes les images en parallèlefind . -name "*.jpg" -print0 | parallel --null --bar convert {} {.}.png
# Compresser des vidéos (limiter à 2 jobs car gourmand)parallel -j 2 --eta ffmpeg -i {} -c:v libx264 {.}.mp4 ::: *.aviTéléchargements parallèles
Section intitulée « Téléchargements parallèles »# Télécharger une liste d'URLsparallel --bar wget :::: urls.txt
# Avec limite de bande passante par jobparallel -j 4 wget --limit-rate=1M {} :::: urls.txtExécution sur serveurs distants
Section intitulée « Exécution sur serveurs distants »# Lancer une commande sur plusieurs serveursparallel -S srv1,srv2,srv3 hostname
# Copier un fichier vers tous les serveursparallel -S srv1,srv2,srv3 --transferfile {} echo "Copié: {}" ::: config.ymlPrérequis : SSH sans mot de passe configuré (ssh-copy-id).
Traitement de fichiers CSV
Section intitulée « Traitement de fichiers CSV »# Fichier batch.csv : source,destination# fichier1.txt,/backup/fichier1.txt# fichier2.txt,/backup/fichier2.txt
parallel --colsep ',' cp {1} {2} :::: batch.csvparallel vs xargs : quand choisir lequel ?
Section intitulée « parallel vs xargs : quand choisir lequel ? »| Critère | parallel | xargs |
|---|---|---|
| Parallélisme natif | ✅ Optimisé | ⚠️ Limité (-P) |
| Barre de progression | ✅ —bar, —eta | ❌ Non |
| Gestion des erreurs | ✅ —halt | ❌ Basique |
| Placeholders | ✅ {}, {.}, {/}, {#} | ⚠️ {} seulement |
| Serveurs distants | ✅ -S | ❌ Non |
| Disponibilité | ⚠️ À installer | ✅ Préinstallé |
| Complexité | ⚠️ Plus d’options | ✅ Plus simple |
En résumé :
- xargs pour les cas simples où la commande est préinstallée
- parallel dès que vous avez besoin de performance, progression ou robustesse
À retenir
Section intitulée « À retenir »:::passe des arguments inline,::::lit depuis un fichier{}= argument complet,{.}= sans extension,{/}= nom de base-j Nlimite le parallélisme — ne pas saturer le système--dry-runest OBLIGATOIRE avant toute commande destructive (rm, mv)find -print0 | parallel --null= pattern sécurisé pour les fichiers--baret--etapour surveiller la progression--halt now,fail=1pour stopper à la première erreur-kpréserve l’ordre des sorties si important