Se vuoi farlo utilizzando strumenti standard, la seguente pipeline dovrebbe funzionare:
find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2
Cioè,
- trova e stampa qui tutte le directory approfondite in primo luogo
- conta il numero di barre in ogni directory e anteponilo al percorso
- ordina per profondità (ovvero numero di barre)
- estrarre solo il percorso.
Per limitare la profondità trovata, aggiungi l'argomento -maxdepth al comando find.
Se vuoi che le directory siano elencate nello stesso ordine in cui le trovi, usa "sort -n -s" invece di "sort -n"; il flag "-s" stabilizza l'ordinamento (vale a dire, preserva l'ordine di input tra gli elementi che si confrontano allo stesso modo).
Il find
comando supporta -printf
opzione che riconosce molti segnaposto.
Uno di questi segnaposto è %d
che restituisce la profondità del percorso dato, relativa a where find
iniziato.
Pertanto puoi utilizzare il seguente semplice one-liner:
find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-
È abbastanza semplice e non dipende da strumenti pesanti come perl
.
Come funziona:
- genera internamente un elenco di file, ciascuno rappresentato come una riga a due campi
- il primo campo contiene la profondità, che viene utilizzata per l'ordinamento numerico (inverso) e quindi eliminata
- il risultato è un semplice elenco di file, un file per riga, nell'ordine più profondo