Si vous souhaitez le faire à l'aide d'outils standard, le pipeline suivant devrait fonctionner :
find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2
C'est-à-dire
- trouver et imprimer tous les répertoires ici en profondeur premier ordre
- comptez le nombre de barres obliques dans chaque répertoire et ajoutez-le au chemin
- trier par profondeur (par exemple, nombre de barres obliques)
- extraire uniquement le chemin.
Pour limiter la profondeur trouvée, ajoutez l'argument -maxdepth à la commande find.
Si vous souhaitez que les répertoires soient répertoriés dans le même ordre que ceux trouvés, utilisez "sort -n -s" au lieu de "sort -n" ; le drapeau "-s" stabilise le tri (c'est-à-dire qu'il préserve l'ordre d'entrée parmi les éléments qui se comparent de manière égale).
Le find
la commande prend en charge -printf
option qui reconnaît beaucoup d'espaces réservés.
Un tel espace réservé est %d
qui rend la profondeur du chemin donné, par rapport à où find
commencé.
Par conséquent, vous pouvez utiliser la simple ligne suivante :
find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-
C'est assez simple et ne dépend pas d'outils lourds comme perl
.
Comment ça marche :
- il génère en interne une liste de fichiers, chacun rendu sous la forme d'une ligne à deux champs
- le premier champ contient la profondeur, qui est utilisée pour le tri numérique (inversé), puis découpée
- le résultat est une simple liste de fichiers, un fichier par ligne, dans l'ordre le plus profond