Risposte:
Non c'è nulla di incorporato da trovare, anche GNU trova. È possibile postelaborare l'output di find
ordinare in base al numero di barre, ad esempio con Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
è l'elenco di tutte le righe di input;$a =~ s!/!/!g
è il numero di barre $a
, che usiamo come criterio di ordinamento.Se puoi usare zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
elenca tutti i file nella directory corrente e nelle sottodirectory.oe
controlla l'ordine in cui vengono restituite le corrispondenze: vengono ordinate in base al valore di REPLY
dopo aver eseguito il codice qui tra virgolette per ogni corrispondenza con REPLY
inizialmente impostato sul percorso corrispondente.$REPLY
per eliminare tutto tranne le barre. Quindi il risultato è costituito da tutto alla profondità 1 (risultante vuoto $REPLY
), quindi tutto alla profondità 2 ( $REPLY
finisce per essere /
), profondità 3 ( //
), ecc.no
Vai a questa domanda su SO per soluzioni alternative.
La mia sensazione è che puoi. Implica grep e simili e un ciclo, ma trovo che funzioni molto bene, in particolare per il tuo caso sulla ricerca che non necessita di essere completata.
Richiede più risorse a causa di:
Questo va bene perché:
#! / Bin / bash profondità = 0 mentre trova -mindepth $ depth -maxdepth $ depth | grep "." fare profondità = $ ((profondità + 1)) fatto
Puoi anche inserirlo in una riga abbastanza (?) Facilmente:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Ma preferisco piccoli script rispetto alla digitazione ...