Respostas:
Não há nada embutido para encontrar, nem o GNU encontra. Você pode pós-processar a saída findpara classificar por número de barras, por exemplo, com Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<> é a lista de todas as linhas de entrada;$a =~ s!/!/!gé o número de barras $a, que usamos como critério de classificação.Se você pode usar o zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/* lista todos os arquivos no diretório e subdiretórios atuais.oecontrola a ordem na qual as correspondências são retornadas: elas são classificadas pelo valor de REPLYdepois de executar o código aqui entre aspas para cada correspondência com REPLYinicialmente definido como o caminho correspondente.$REPLYpara excluir tudo, exceto barras. Portanto, o resultado consiste em tudo na profundidade 1 (resultado vazio $REPLY), então tudo na profundidade 2 ( $REPLYacaba sendo /), profundidade 3 ( //), etc.Não
Vá para esta pergunta no SO para soluções alternativas.
Meu sentimento é que você pode. Envolve grep e tal e um loop, mas acho que funciona muito bem, especificamente para o seu caso sobre a descoberta que não precisa ser concluída.
Consome mais recursos devido a:
Isso é bom porque:
#! / bin / bash
depth = 0
enquanto encontrar -mindepth $ depth -maxdepth $ depth | grep '.'
Faz
depth = $ ((profundidade + 1))
feito
Você também pode ajustá-lo facilmente em uma linha (?):
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Mas eu prefiro pequenos scripts do que digitar ...