O pedido para grep -r geralmente será aleatório (não necessariamente alfabético), geralmente com base em como os arquivos são organizados no diretório e o possível reordenamento que sua implementação de grep pode fazer para otimizar a travessia do diretório. / p>
Aqui, com o GNU grep 2.25:
$ grep -r . .
./4/c:c
./1/b:b
./2/a:a
./10/d:d
Se você deseja um pedido específico, é preciso desistir do -r e fornecer a lista de arquivos como argumentos na ordem desejada.
Por exemplo, no seu caso, e usando zsh :
$ grep -H . ./**/*(D.On)
./4/c:c
./2/a:a
./1/b:b
./10/d:d
Aqui, usando On para ordem inversa por nome . Você pode adicionar o qualificador n para classificação numérica:
$ grep -H . ./**/*(D.nOn)
./10/d:d
./4/c:c
./2/a:a
./1/b:b
( -H é outra extensão do GNU grep para garantir que o nome do arquivo seja sempre impresso mesmo se houver apenas um arquivo. Com outras implementações grep , você pode adicionar um arquivo extra vazio como argumento como /dev/null certifique-se de que grep seja passado com pelo menos dois nomes de arquivos).
Isso também é muito útil para arquivos de log zgrep girados em ordem cronológica (como access.log.10.gz ... access.log.2.gz , access.log.1 , access.log ) com:
zgrep something access.log*(nOn)
(embora você também possa classificar por o horário da última modificação com zgrep something access.log*(Om) , se puder confiar nisso).