Re: répertoires « feuilles » d'une arborescence

Top Page

Reply to this message
Author: Marc TERRIER
Date:  
To: guilde
New-Topics: Re: répertoires « feuilles » d'une arborescence
Subject: Re: répertoires « feuilles » d'une arborescence
Edgar Bonet <guilde@???> a écrit :

> Bonsoir !
>
>> [...] comment afficher
>> les répertoires « feuilles » d'une arborescence, c'est-à-dire ceux qui
>> ne contiennent pas de sous-répertoire ?
>
> Sur un FS de type Unix, chaque répertoire a au moins deux liens durs :
> son nom dans le répertoire parent et "." dans lui-même. Chaque
> sous-répertoire contient un lien suplémentaire nommé "..". Donc :
>
>     find . -type d -links 2

>
> Edgar.


Bonsoir,

La solution que propose Edgar est très concise et très élégante, mais
malgré la lecture du 'man find', je n'arrive pas à la comprendre
parfaitement, et donc à être sûr qu'elle fait bien exactement ce que
Frédéric attend, ni plus ni moins.

Je vous propose donc ma propre solution ("leafdirs"), qui ne donne pas
le même résultat que celle d'Edgar (et qui est moins concise), et je
vous laisse juger :

$ cat leafdirs

#!/bin/bash

ls -Rl | awk '$1~/:$/' > /tmp/all_dirs

while read dirname ; do
   dirname=`echo ${dirname} | sed -e 's/:$/\//'`
   nbocc=`grep ${dirname} /tmp/all_dirs | wc -l`
   if [ "${nbocc}"="0" ] ; then
     echo ${dirname}
   fi
done < /tmp/all_dirs


Explication :

Le ls -Rl effectue un listing récursif en format long de tout le
contenu du répertoire courant, dont je ne conserve que les lignes qui
se terminent par ":", c'est à dire les noms de sous-répertoires
(feuilles ou non), et je mets tout ça dans un fichier temporaire.

Ensuite, il faut filtrer, pour ne garder que les répertoires feuilles.
Vu que les répertoires non-feuilles apparaissent au début du nom des
sous-répertoires dont ils sont parents, je cherche chaque nom de
répertoire figurant dans le fichier temporaire, après y avoir remplacé
le ':' final par un '/'. Si je l'y trouve, c'est qu'il est parent d'un
sous-répertoire. Si au contraire, le nombre d'occurrences est nul,
c'est qu'on a affaire à un répertoire feuille.

--
Marc
Mail : marc.terrier [at] free.fr
Site : http://marc.terrier.free.fr