# Utiliser parallel dans un script bash

**URL:** <https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210>\
**Category:** Programmation\
**Tags:** bash, parallel\
**Created:** [Avril 12, 2026, 2:00 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210 "2026-04-12T14:00:07Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Avril 12, 2026, 2:00 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/1 "2026-04-12T14:00:07Z")

</div>

Bonjour.

J’essaye d’utiliser l’outil `parallel` dans un script bash, dont le but est le déploiement du répertoire `public` d’un site fait avec le SGG Hugo.  
Voici le script : [PrivateBin](https://privatebin.net/?0c611e9516a6ced7#12Uvfk5sPBBWh25HHXihmbdRXzAuqgpXL1T1C3Zh8JMy)

Dans la fonction `_compress`, je n’arrive pas à comprendre comment utiliser parallel pour mettre en parallèle l’appel à deux autres fonctions.

Function `_compress()` :

```bash
# Compress all thoses datas files. .eot, .otf and .ttf are font files
_compress() {

    cd "${dir_local}" || exit 1
    find . -type f -size +1024c -a \( \
        -name "*.eot" -o -name "*.html" \
        -o -name "*.otf" -o -name "*.svg" -o -name "*.ttf" \
        -o -name "*.txt" -o -name "*.xml" \
        \) | while read -r line;
        do echo "Compress ${line}";
            #find . ! -newer "${line}" | parallel -j "${nproc}" _brotli _gz;
            find . ! -newer "${line}" | _brotli & _gz;
            #find . ! -newer "${line}" | _brotli; _gz;
        done
    cd "$ROOT" || exit 1

}

```

Dans l’état actuel, la commande fonctionne bien ; elle exécute les deux commandes `_brotly` et `_gz` en parallèle, mais c’est du «&nbsp;parallélisme&nbsp;» fait par le système.

Si je commente la ligne fonctionnelle pour décommenter celle concernant l’utilisation du binaire `parallel`, lors de l’exécution le script me retourne que les commandes appelées n’existent pas !  
Hors, elles existent bel et bien dans le script.

J’ai essayé de trouver des informations concernant l’usage de l’outil `parallel` appelant n-function, mais je n’en trouve pas dans le contexte de script bash.

Peut-être que quelqu’un ici a une idée pertinente ?!  
Merci d’avance.

---

<div class="post-metadata">

**Author:** ![AnonymousCoward](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f9ae1b/32.png) [@AnonymousCoward](https://www.debian-fr.org/u/AnonymousCoward)\
**Post date:** [Avril 13, 2026, 1:03 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/2 "2026-04-13T13:03:51Z")

</div>

Bonjour,

Merci de m’avoir fait redécouvrir [parallel](https://packages.debian.org/trixie/parallel).

Ci-dessous un petit exemple.

```bash
#!/usr/bin/bash

# https://stackoverflow.com/a/4321522

funcA() {
        printf -- 'starting job A\n'
        sleep 3
        printf -- 'job A terminating\n'
}
export -f funcA 

funcB() {
        printf -- 'starting job B\n'
        sleep 2
        printf -- 'job B terminating\n'
}
export -f funcB 

time -- find / -name passwd -print0 2>/dev/null | \
        parallel --jobs 100 --ungroup -0 --quote -- ::: funcA funcB :::: -

```

–  
AnonymousCoward

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Avril 13, 2026, 3:14 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/3 "2026-04-13T15:14:44Z")

</div>

OK, déjà merci pour ta réponse.

Donc, si je comprend bien, en premier tu exportes la fonction XYZ, puis la suivante pour pouvoir l’appeler en argument de l’outil parallel.

Je viens de trouver le [fichier pdf parallel\_examples](https://www.gnu.org/software/parallel/parallel_examples.pdf) ; et je n’avais pas vu les exports dans ton script d’exemples, avant de le lire dans ledit fichier.  
Bon, je vais m’atteler à comprendre les autres symboles déclarés en tant qu’arguments de l’outil.

---

<div class="post-metadata">

**Author:** ![AnonymousCoward](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f9ae1b/32.png) [@AnonymousCoward](https://www.debian-fr.org/u/AnonymousCoward)\
**Post date:** [Avril 13, 2026, 3:40 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/4 "2026-04-13T15:40:14Z")

</div>

Oui, il faut d’abord exporter la fonction. Puis lancer un bash qui appelle la fonction :  
`bash -c '{} "{}"'` , qui avec le remplacement des paires d’accolades par les arguments devient `bash -c 'funcA "/etc/passwd"'` .

C’est ce lien qui m’a donné la solution : [https://stackoverflow.com/a/4321522](https://stackoverflow.com/a/4321522)

–  
AnonymousCoward

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Avril 13, 2026, 3:46 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/5 "2026-04-13T15:46:35Z")

</div>

Je suis entrain de potasser le document GNU\_Parallel de 2018, en même temps 😛

Mais si je comprend bien le chapitre EXAMPLE: Calling Bash functions du document parallel\_examples, cité ci-dessus, il n’y a pas besoin de déclarer `bash -c '{} "{}"`.  
L’export de la fonction est un premier pas ; ensuite l’appel à la fonction se fait très simplement.

Exemple donné :

```auto
doit() {
    … n instructions
}
export -f doit
parallel doit ::: 1 2 3

doubleit() {
    … z instructions
}
export -f doubleit
parallel doubleit ::: 1 2 3 ::: a b

```

---

<div class="post-metadata">

**Author:** ![AnonymousCoward](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f9ae1b/32.png) [@AnonymousCoward](https://www.debian-fr.org/u/AnonymousCoward)\
**Post date:** [Avril 13, 2026, 4:32 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/6 "2026-04-13T16:32:23Z")

</div>

Oui, tu as tout à fait raison pour l’appel à la fonction.  
Il faut par contre rajouter `--quote` au cas où le chemin du fichier contiendrait un séparateur.

Exemple modifié.

–  
AnonymousCoward

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Avril 13, 2026, 4:45 UTC](https://www.debian-fr.org/t/utiliser-parallel-dans-un-script-bash/92210/7 "2026-04-13T16:45:49Z")

</div>

Bon, il semble que j’y arrive en ayant modifié ainsi :

```bash
_parallel_cmprs() {

    cd "${dir_local}" || exit 1

    find . -type f -size +1024c -a \( \
        -name "*.eot" -o -name "*.html" \
        -o -name "*.otf" -o -name "*.svg" -o -name "*.ttf" \
        -o -name "*.txt" -o -name "*.xml" \
        \) | parallel -j "${nproc}" "echo Compress {}; brotli-rs -c -efficient -q11 {} {}.br; pigz -9 -k {}"

    cd "$ROOT" || exit 1

}

```

En effet, la section ‹&nbsp; **EXAMPLE: Rewriting a for-loop and a while-read-loop** &nbsp;› m’a permis de comprendre que je pouvais faire bien plus simple que de passer par une boucle ‹&nbsp;find | while read loop&nbsp;› !  
`parallel` est vraiment un outil puissant.
