Si desea hacerlo utilizando herramientas estándar, la siguiente canalización debería funcionar:
find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2
Es decir,
- busque e imprima todos los directorios aquí en primer orden en profundidad
- Cuente el número de barras en cada directorio y anótelo a la ruta
- ordenar por profundidad (es decir, número de barras)
- extrae solo la ruta.
Para limitar la profundidad encontrada, agregue el argumento -max depth al comando de búsqueda.
Si desea que los directorios se enumeren en el mismo orden en que los encuentra, use "sort -n -s" en lugar de "sort -n"; el indicador "-s" estabiliza la clasificación (es decir, conserva el orden de entrada entre los elementos que se comparan por igual).
El find
el comando admite -printf
opción que reconoce muchos marcadores de posición.
Uno de esos marcadores de posición es %d
que representa la profundidad de la ruta dada, relativa a donde find
comenzó.
Por lo tanto, puede usar la siguiente frase simple:
find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-
Es bastante sencillo y no depende de herramientas pesadas como perl
.
Cómo funciona:
- genera internamente una lista de archivos, cada uno representado como una línea de dos campos
- el primer campo contiene la profundidad, que se utiliza para la clasificación numérica (inversa) y luego se corta
- el resultado es una lista de archivos simple, un archivo por línea, en el orden más profundo primero