Risposte:
Non c'è nulla di incorporato da trovare, anche GNU trova. È possibile postelaborare l'output di findordinare 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.oecontrolla l'ordine in cui vengono restituite le corrispondenze: vengono ordinate in base al valore di REPLYdopo aver eseguito il codice qui tra virgolette per ogni corrispondenza con REPLYinizialmente impostato sul percorso corrispondente.$REPLYper eliminare tutto tranne le barre. Quindi il risultato è costituito da tutto alla profondità 1 (risultante vuoto $REPLY), quindi tutto alla profondità 2 ( $REPLYfinisce 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 ...