# Améliorer la présentation de la sortie de "find"

**URL:** <https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404>\
**Category:** Support Debian\
**Created:** [Novembre 13, 2022, 7:23 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404 "2022-11-13T07:23:00Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 13, 2022, 7:23 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/1 "2022-11-13T07:23:00Z")

</div>

bonjour ,

en cherchant à séparer répertoires et fichiers dans l’affichage du contenu d’un répertoire j’ai fabriqué une commande qui fonctionne bien mais qui me donne une présentation un peu lourde pour les fichiers avec un ( **./** ) ( = répertoire courant ? ) systématiquement présent et qui ne m’apporte rien , du moins il me semble . Est-il possible de modifier cette commande pour supprimer ce **./** du début ?

```nohighlight
mm@Xfce:~$ find -maxdepth 1 -type f ; (find -maxdepth 1 -type f)| wc -l ; ls -d */ ; (ls -d */) | wc -l
./.ICEauthority
./.bash_aliases
./.lesshst
etc ...
13
Bureau/ Images/ Musique/ Public/ Vidéos/
Documents/ Modèles/ PDF/ Téléchargements/
9

```

ps : à moins qu’une autre commande plus simple puisse faire l’affaire .

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Novembre 13, 2022, 8:08 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/2 "2022-11-13T08:08:44Z")

</div>

Tu peux regarder une fonction de ce genre:

```bash
lsfd() { i=0 ; j=0
  while read L ;do basename $L;((i++));done < <(find -maxdepth 1 -type f |sort)
  echo "● Nombre de fichiers: $i"
  while read L ;do echo $L;((j++));done < <(find -maxdepth 1 -type d |sort)
  echo "● Nombre de répertoires: $j"
}

```

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 13, 2022, 8:20 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/3 "2022-11-13T08:20:31Z")

</div>

> [@Verner](#):
>
> Tu peux regarder une fonction de ce genre:

j’ai donc enregistré ce que tu proposes dans un fichier _test_ que j’ai rendu exécutable puis lancé :

```auto
mm@Xfce:~$ ls -l test
-rwxr--r-- 1 mm mm 273 13 nov. 09:10 test
mm@Xfce:~$ test

```

sans succès apparemment . Qu’est-ce que j’ai oublié de faire ?

note : je ne connais pas encore la commande interne _while_

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Novembre 13, 2022, 8:23 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/4 "2022-11-13T08:23:00Z")

</div>

1 - tu fais un copier/coller du bloc entier de la fonction` lsfd` dans ton terminal  
2 - tu exécutes la commande `lsfd`  
C’est tout.

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 13, 2022, 8:28 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/5 "2022-11-13T08:28:41Z")

</div>

j’ai cru que c’était un fichier shell !!

donc voilà le résultat :

```auto
mm@Xfce:~$ lsfd
.bash_aliases
.bash_history
.bash_logout
.bashrc
.dmrc
.ICEauthority
.lesshst
.profile
test
.test.swp
.viminfo
.wget-hsts
.Xauthority
.xsession-errors
.xsession-errors.old
● Nombre de fichiers: 15
.
./Bureau
./.cache
./.config
./.cups
./.dbus
./Documents
./.gnupg
./.googleearth
./Images
./.local
./Modèles
./.mozilla
./.mozilla_sauv_28_10_22
./Musique
./PDF
./.pki
./Public
./.sane
./.ssh
./Téléchargements
./.themes
./.thunderbird
./.thunderbird_sauv_28_10_22
./Vidéos
● Nombre de répertoires: 25

```

ça fonctionne bien ~~pour les fichiers mais nettement moins bien pour les répertoires~~. Je vais donc essayer de faire un genre de mix en utilisant ma commande pour les répertoires .

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Novembre 13, 2022, 8:34 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/6 "2022-11-13T08:34:42Z")

</div>

Ta terminologie est très vague.  
exemple: ‹ ./.cache › est un répertoire, certes caché, mais un répertoire.  
.viminfo est un fichier caché, et tu ne dis pas que ça ne ‹ fonctionne pas › ou ‹ mal ›.

Tu dois donc clarifier si tu souhaites afficher/compter les fichiers/répertoires ‹ cachés ›  
―――――――――――――  
Tu peux réessayer ça:

```bash
lsfd() { i=0 ; j=0
  while read L ;do basename $L;((i++));done < <(find -maxdepth 1 -type f |sort)
  printf "● Nombre de fichiers: $i\n\n"
  while read L ;do printf "$L ";((j++));done < <(/usr/bin/ls -d */)
  printf "\n● Nombre de répertoires: $j\n"
}

```

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 13, 2022, 8:38 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/7 "2022-11-13T08:38:25Z")

</div>

je voudrais juste retrouver les deux listes que j’ai données dans mon 1er message mais sans les ( ./ ) dans la liste des fichiers . Je vais essayer de combiner la 1ère partie de ta commande avec la 2ème partie de la mienne . Ça devrait le faire je pense .

Ça a marché . Avec un alias ça devrait être facilement exploitable .

Merci pour le coup de main .

Il me reste à essayer de comprendre ta commande .

suite :

> Tu peux réessayer ça:

effectivement ça marche bien . Ma solution qui combine les deux parties de commande a pour elle de mettre de la couleur pour les répertoires . Donc je vais voir ce que je retiens .

Merci bien .

suite:

> Ta terminologie est très vague.

effectivement et je viens d’en prendre conscience en utilisant _ls -A_ au lieu de_ls_ car je n’avais pas vraiment réalisé que , par exemple, .thunderbird était un répertoire , je l’avais toujours considéré comme un dossier . Idem pour les autres , inconsciemment d’ailleurs , sans y avoir réfléchi . Et " find -type d " que tu utilises finit de m’en convaincre . De toute façon j’aurais buté sur ce problème dans un 2ème temps car il me fallait bien tenir compte des ces «&nbsp;dossiers&nbsp;» cachés . Même si théoriquement je vois bien la différence entre un "répertoire"et un «&nbsp;dossier&nbsp;» , pratiquement et à l’évidence ça me pose un problème car même debian les considère comme des dossiers ( cf «&nbsp;propriétés&nbsp;» ) . Mais comme aucune option pour _ls_ ou _find_ n’a l’air d’exister pour les dossiers , j’allais buter sur ce point précis … ?

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Novembre 13, 2022, 8:48 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/8 "2022-11-13T08:48:59Z")

</div>

Remarque: attention à la commande `ls` qui peut-être soit la commande ls, ou un alias.  
C’est la raison de l’usage du `/usr/bin/ls` au lieu de `ls` du bloc ci-dessus pour garantir un résultat attendu.  
Voir `type ls`

Une fois satisfait, tu copies/colles le bloc fonction dans ton fichier ‹&nbsp;.bashrc&nbsp;› , et tu auras la fonction ‹&nbsp;lsfd&nbsp;› disponible à chaque session.

---

<div class="post-metadata">

**Author:** ![mdk](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mdk/32/12215_2.png) [@mdk](https://www.debian-fr.org/u/mdk)\
**Post date:** [Novembre 13, 2022, 9:29 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/9 "2022-11-13T09:29:05Z")

</div>

> [@zao](#):
>
> séparer répertoires et fichiers dans l’affichage du contenu d’un répertoire

La coloration de `ls` ne te suffit pas pour ça ? Combiné à `ls --group-directories-first` peut-être ?

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 13, 2022, 9:38 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/10 "2022-11-13T09:38:48Z")

</div>

> [@mdk](#):
>
> La coloration de `ls` ne te suffit pas pour ça ?

cette commande me donne presque ce que je désire à des fins de comparaison rapide entre mon portable et un ssd externe qui me sert de debian nomade et de sauvegarde . Mais elle sera facile à personnaliser … à condition que j’arrive à séparer physiquepent les 2 groupes . Merci .

Affichées côte à côte sur un même écran d’ordinateur si les listes sont séparées je vois tout de suite les différences éventuelles et pas seulement pour ce répertoire personnel .

---

<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 13, 2022, 9:47 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/11 "2022-11-13T09:47:23Z")

</div>

Bonjour

Il manquait une paire de guillemets,  
ce qui donnerait :

```auto
lsfd() { i=0 ; j=0
  while read L ;do basename "$L";((i++));done < <(find -maxdepth 1 -type f |sort)
  printf "● Nombre de fichiers: $i\n\n"
  while read L ;do printf "$L ";((j++));done < <(/usr/bin/ls -d */)
  printf "\n● Nombre de répertoires: $j\n"
}

```

* * *

Il faudra trouver un autre nom que [lsfd](https://manpages.debian.org/testing/util-linux-extra/lsfd.1.en.html)

---

<div class="post-metadata">

**Author:** ![mdk](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mdk/32/12215_2.png) [@mdk](https://www.debian-fr.org/u/mdk)\
**Post date:** [Novembre 13, 2022, 9:47 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/12 "2022-11-13T09:47:42Z")

</div>

> [@zao](#):
>
> je vois tout de suite les différences éventuelles

`diff -r` ou `rsync --dry-run` peut aussi t’aider à trouver des différences entre deux arborescences.

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 13, 2022, 2:56 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/13 "2022-11-13T14:56:25Z")

</div>

> [@mdk](#):
>
> `diff -r` ou `rsync --dry-run` peut aussi t’aider à trouver des différences entre deux arborescences.

Je n’avais pas pensé à cette solution qui implique que je branche mon ssd nomade sur mon portable . Sinon avant je passais par le protocole **ssh** après avoir mis debian à jour , toujours avec **ssh**.

Donc je viens de tester cette commande **diff -r** que je ne connaissais pas avec cette option ( -r ): ça marche très bien .

Merci .

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 14, 2022, 8:11 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/14 "2022-11-14T08:11:44Z")

</div>

> [@Verner](#):
>
> Tu peux regarder une fonction de ce genre:
> 
> ```auto
> lsfd() { i=0 ; j=0
> while read L ;do basename $L;((i++));done < <(find -maxdepth 1 -type f |sort)
> echo "● Nombre de fichiers: $i"
> while read L ;do echo $L;((j++));done < <(find -maxdepth 1 -type d |sort)
> echo "● Nombre de répertoires: $j"
> }
> 
> ```

j’ai adapté ta fonction pour séparer les répertoires cachés du reste afin d’obtenir une meilleure lisibilité :

```auto
lsfd() { i=0 ; j=0 ; k=0 ; 
while read L ;do basename $L;((i++));done < <(find -maxdepth 1 -type f |sort); printf "● Nombre de fichiers: $i\n\n"; 
while read L ;do printf "$L ";((j++));done < <(/usr/bin/ls -d */); printf "\n● Nombre de répertoires: $j\n" 
while read L ;do basename $L;((k++));done < <(find -maxdepth 1 -type d -name '.*' | sort); echo "● Nombre de répertoires cachés: $k" ; }

```

j’espère que ça n’est pas trop bancal ; en tout cas ça fonctionne et j’ai scindé en 3 parties distinctes la sortie de find en me débarrassant des préfixes (?) ou peut-être du «&nbsp;chemin&nbsp;» (?) **( ./ )**.

Donc ta fonction utilisée en complément de **diff -r** , selon la configuration matérielle utilisée , va me simplifier les comparaisons de listes .

**question pratique subsidiaire** : je viens de corriger une faute ( ajout d’un simple «&nbsp;r&nbsp;» ) et cela a provoqué une remontée de cette file . Peut-on éviter cette remontée si on la juge inutile ?

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Novembre 14, 2022, 8:29 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/15 "2022-11-14T20:29:28Z")

</div>

> [@zao](#):
>
> j’ai scindé en 3 parties distinctes

Et pourquoi pas 4 pendant qu’on y est: fichiers/répertoires cachés ou non.  
Une variante pour investigation:

```bash
lsrep() { i=0 ; j=0 ; k=0 ; l=0 ; echo > ${T:=/tmp/lsrep}
  while read L ; do
   [[-f $L && ! $L =~ ^\.]] && echo "1$L" >> $T && ((i++))
   [[-f $L && $L =~ ^\.]] && echo "2$L" >> $T && ((j++))
   [[-d $L && ! $L =~ ^\.]] && echo "3$L" >> $T && ((k++)) 
   [[-d $L && $L =~ ^\.]] && echo "4$L" >> $T && ((l++))
  done < <(ls -A1)
  ((i > 0)) && sed -n '/^1/{s/.//;p}' $T && printf "\e[32m● Nombre de fichiers: $i\e[m\n\n"
  ((j > 0)) && sed -n '/^2/{s/.//;p}' $T && printf "\e[32m● Nombre de fichiers cachés: $j\e[m\n\n"
  ((k > 0)) && sed -n '/^3/{s/./ /;p}' $T |tr -d '\n' && printf "\n\e[34m● Nombre de répertoires: $k\e[m\n\n"
  ((l > 0)) && sed -n '/^4/{s/.//;p}' $T && printf "\e[34m● Nombre de répertoires cachés: $l\e[m\n"
  printf "―――――――――――\nEn Synthèse: F= $i ~ Fc= $j | D= $k ~ Dc= $l\n"
}

```

Edit: exclusion des liens symboliques.

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 15, 2022, 4:38 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/16 "2022-11-15T04:38:28Z")

</div>

> [@Verner](#):
>
> Edit: exclusion des liens symboliques.

heureusement que tu le précises car j’aurais pu chercher longtemps ce que faisait cette fonction .

Je pense que je vais en rester à 3 niveaux en cherchant plutôt à améliorer la lisibilité de la sortie tout en pouvant facilement modifier la présentation : l’usage le dira .

J’essaie ceci sur un niveau ( le 2 ) . C’est certainement du bricolage mais même si ça ne doit pas être techniquement très au point , ça fonctionne plutôt bien . J’ai aussi tenu compte de la remarque de @anon29980398 pour choisir un nom :

```auto
comp() { i=0 ; j=0 ; k=0 ;
 while read L ;do basename $L;((i++));done < <(find -maxdepth 1 -type f |sort); printf "\n● Nombre de fichiers: $i\n\n";
 while read L ;do printf "";((j++));done < <(/usr/bin/ls -d */) ;( ls -d */) | pr -2t -w110 ; printf "\n● Nombre de répertoires: $j\n\n"
 while read L ;do basename $L;((k++));done < <(find -maxdepth 1 -type d -name '.*' | sort); printf "\n● Nombre de répertoires cachés: $k\n" ; }

```

note 1 : à terme je vais chercher à automatiser cette recherche lorsque mon ssd est branché sur une autre machine , sinon **diff -r** convient très bien , avec quelque chose du genre :  
**ssh …ssd… find \> fichier …"cat fichier … " | diff** etc … En attendant je reste avec ma méthode qui marche plutôt bien et qui me permet de tester . Mais je n’aime pas trop la présentation de la sortie de **diff**.

note 2 : si je supprime la première redirection de " **\< \<(find …** je ne vois aucun changement dans la sortie . Quel est son rôle ?

---

<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 15, 2022, 6:32 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/17 "2022-11-15T06:32:59Z")

</div>

Bonjour

Pour voir ce que ça donne, créé un fichier ou et un répertoire nommé, par exemple :

```nohighlight
"Capture d'ecran_2021-03-13_07-51-47.png"

```

dans le répertoire qui va être listé par ta fonction **comp** et lance la fonction.

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 15, 2022, 7:13 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/18 "2022-11-15T07:13:00Z")

</div>

> [@anon29980398](#):
>
> ```auto
> "Capture d'ecran_2021-03-13_07-51-47.png"
> 
> ```

bonjour ,

en utilisant mon répertoire **Images** je vois déjà que même avec **( \< \< )** les espaces vides et la présence de ( **de** ) dans les noms de fichier posent problème :

```auto
mm@Xfce:~/Images$ comp
Capture = arrêt à l'espace vide
remède = _

basename: opérande supplémentaire « de »
Saisissez « basename --help » pour plus d'informations. ==> Capture d’écran de 2021-10-14 14-03-34.png
remède = _

```

maintenant je vais voir pour l’effet de l’absence de la redirection n°1

note : ces noms sont un peu anciens car j’ai pris l’habitude de ne plus laisser d’espace vide

---

<div class="post-metadata">

**Author:** ![zao](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/ce7236/32.png) [@zao](https://www.debian-fr.org/u/zao)\
**Post date:** [Novembre 15, 2022, 7:54 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/19 "2022-11-15T07:54:37Z")

</div>

pour ce qui est de l’effet de l’absence de ( \< ) je ne vois pas :

```auto
mm@Xfce:~/Images/cap$ comp ( un seul < en <(find...)
Capture = arrêt à l'espace vide

● Nombre de fichiers: 1

/usr/bin/ls: impossible d'accéder à '*/': Aucun fichier ou dossier de ce type
ls: impossible d'accéder à '*/': Aucun fichier ou dossier de ce type

● Nombre de répertoires: 0

.

● Nombre de répertoires cachés: 1

mm@Xfce:~/Images/cap$ comp ( avec les deux < )
Capture = idem ci-dessus

● Nombre de fichiers: 1

/usr/bin/ls: impossible d'accéder à '*/': Aucun fichier ou dossier de ce type
ls: impossible d'accéder à '*/': Aucun fichier ou dossier de ce type

● Nombre de répertoires: 0

.

● Nombre de répertoires cachés: 1
```

---

<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 15, 2022, 9:06 UTC](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/20 "2022-11-15T09:06:21Z")

</div>

> [@zao](#):
>
> … les espaces vides et la présence de ( **de** ) dans les noms de fichier posent problème …

Voir mon [message #11](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404/11)

[Page suivante](https://www.debian-fr.org/t/ameliorer-la-presentation-de-la-sortie-de-find/87404.md?page=2)
