grep recursivamente para trás

1

Como faço para voltar de forma negativa? Digamos que eu tenha as seguintes pastas:

20170808
20170809
20170810

Quando eu faço grep -ri 'string' grep pega cada pasta em ordem alfabética e procura por 'string'. Como eu faço isso para trás, do último para o primeiro?

    
por dasj19 10.08.2017 / 14:32

1 resposta

2

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).

    
por 10.08.2017 / 14:39

Tags