Respostas:
Não há nada embutido para encontrar, nem o GNU encontra. Você pode pós-processar a saída find
para 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.oe
controla a ordem na qual as correspondências são retornadas: elas são classificadas pelo valor de REPLY
depois de executar o código aqui entre aspas para cada correspondência com REPLY
inicialmente definido como o caminho correspondente.$REPLY
para excluir tudo, exceto barras. Portanto, o resultado consiste em tudo na profundidade 1 (resultado vazio $REPLY
), então tudo na profundidade 2 ( $REPLY
acaba 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 ...