# Concaténation de retour d'une commande en bash

**URL:** <https://www.debian-fr.org/t/concatenation-de-retour-dune-commande-en-bash/77934>\
**Category:** Programmation\
**Tags:** bash, awk\
**Created:** [Novembre 6, 2018, 5:21 UTC](https://www.debian-fr.org/t/concatenation-de-retour-dune-commande-en-bash/77934 "2018-11-06T17:21:43Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Novembre 6, 2018, 5:21 UTC](https://www.debian-fr.org/t/concatenation-de-retour-dune-commande-en-bash/77934/1 "2018-11-06T17:21:44Z")

</div>

Salut,

Je cherche à concaténer le retour d’une commande afin de pouvoir me faire une liste de vhd à jour.

Le but est de pouvoir lister des vhd sur une répertoire monté en NFS à la demande d’un script effectuant une vérification d’intégrité via l’utilitaire vhd-util (paquet pour les curieux blktap-utils ^^ ).

Lorsque je fais un simple **ls** du répertoire j’ai un truc comme ça :

```auto
/mnt/verif/snapshots/3701/70160:
cdce727e-63e9-479f-a377-cf7e71317848.vhd

/mnt/verif/snapshots/3701/70285:
ac6bfb89-f131-4c8c-8719-8765efd3339c.vhd

/mnt/verif/snapshots/3701/70287:
7bd4e668-47e0-4a2d-8c65-4942cf5ebbd5.vhd

/mnt/verif/snapshots/3701/70327:
c51d621d-f46d-40f4-b845-6dca9bb22217.vhd

/mnt/verif/snapshots/3701/70328:
a23bb5cb-c913-44b8-821b-6d29599d3e0d.vhd

/mnt/verif/snapshots/3701/70329:
3edeabed-507b-4db2-9310-b70f702687e8.vhd

/mnt/verif/snapshots/3701/70330:
44bdc7b8-bcd1-4d0e-b8e5-954ac71671f4.vhd

/mnt/verif/snapshots/3701/70331:
2ce092ca-d168-4e1f-b525-912a2d8d49f5.vhd

```

La liste est écourté car longue comme ma … 😃

à première vue je pourrais supprimer les lignes vide à l’aide de sed ‘/^$/d’ et je devrais pouvoir m’appuyer sur les : pour signaler ma fin de première ligne mais je ne parviens pas à le faire en une fois à l’aide de awk.

y’a t’il une bonne âme pour me montrer la voie ?

Le résultat devrais être du genre :

```auto
/mnt/verif/snapshots/3701/70160/cdce727e-63e9-479f-a377-cf7e71317848.vhd
/mnt/verif/snapshots/3701/70285/ac6bfb89-f131-4c8c-8719-8765efd3339c.vhd

```

le remplacement des : par un 8 se faisant pour l’instant à coup de **tr** mais je ne dit pas non à un traitement des lignes vides et du remplacement des : directement par **awk**

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Novembre 6, 2018, 5:56 UTC](https://www.debian-fr.org/t/concatenation-de-retour-dune-commande-en-bash/77934/2 "2018-11-06T17:56:53Z")

</div>

Bonsoir **Clochette**

En lignes de commande **bash**

La ligne de commandes suivante  
va afficher tous les fichiers dont le nom d’extension est **`.vhd`**  
qui seront trouvés dans le répertoire **`/mnt/verif/snapshots/3701`**  
et dans tous ses sous-répertoires.

```nohighlight
while read; do echo "$REPLY"; done <<< $(find /mnt/verif/snapshots/3701 -name "*.vhd" 2>/dev/null)

```

il te restera à remplacer  
**`echo "$REPLY"`**  
par ta ligne de commande utilisant **`vhd-util`**  
sachant que la variable :  
**`REPLY`** (qui est automatiquement créée par l’utilisation de la commande **`read`** )  
correspond à :  
**`/mnt/verif/snapshots/3701/unSousRep/nomDuFichiertrouvé.vhd`**

* * *

Ou bien, si tu préfère, toujours en **bash**  
tu peux aussi faire ça en utilisant un tableau  
qui contiendrait la liste des fichiers **`.vhd`**  
qui sera retournée par la commande **`find`** :

```nohighlight
tablVhds=($(find /mnt/verif/snapshots/3701 -name "*.vhd" 2>/dev/null))
for fichVhd in "${tablVhds[@]}"; do echo "$fichVhd"; done

```

* * *

Bien sûr, tu peux mettre autant de commandes que tu veux entre **`do`** et **`done`**  
voire même envoyer le nom du fichier en paramètre d’une fonction de traitement  
ou un vers un autre script.

* * *

Tu peux aussi contrôler la profondeur de hiérarchie (niveau de profondeur des sous-répertoires)  
de la recherche effectuée par la commande **`find`**  
en utilisant l’option **`maxdepth`** de la commande **`find`**

Par exemple, dans la ligne de commande suivante,  
**`find`** ne recherchera que les fichiers **`.vhd`**  
qui sont présents dans le répertoire **`/mnt/verif/snapshots/3701`**  
et **PAS** dans les sous-répertoires de **`/mnt/verif/snapshots/3701`**

```nohighlight
find /mnt/verif/snapshots/3701 -maxdepth 1 -name "*.vhd" 2>/dev/null

```

mais en mettant **`-maxdepth 2`**

la recherche se fera dans :  
**`/mnt/verif/snapshots/3701/`**  
**`/mnt/verif/snapshots/3701/70329`**

mais **PAS** dans :  
**`/mnt/verif/snapshots/3701/70329/12345`**

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Novembre 7, 2018, 8:13 UTC](https://www.debian-fr.org/t/concatenation-de-retour-dune-commande-en-bash/77934/3 "2018-11-07T08:13:03Z")

</div>

> [@anon29980398](#):
>
> Ou bien, si tu préfère, toujours en **bash**  
> tu peux aussi faire ça en utilisant un tableau  
> qui contiendrait la liste des fichiers **`.vhd`**  
> qui sera retournée par la commande **`find`** :
> 
> ```auto
> tablVhds=($(find /mnt/verif/snapshots/3701 -name "*.vhd" 2>/dev/null))
> for fichVhd in "${tablVhds[@]}"; do echo "$fichVhd"; done
> 
> ```

Eh benh pour le coup le coup du tableau est géniale il me permet de préparer une liste propre et de réutiliser le tableau pour d’autre actions, je le note dans ma petite tête 😉

Un grand merci.
