Como grep recursivamente na ordem da hora da última modificação?

3

grep -r faz uma pesquisa recursiva em todos os arquivos em um diretório específico. No entanto, se eu quiser que esses arquivos sejam lidos pelo grep na ordem de sua última modificação, como faço isso?

    
por CodeBlue 23.07.2013 / 17:56

2 respostas

4

com zsh :

grep -- foo **/*(D.om)

Com ferramentas GNU:

find . -type f -printf '%T@\t%p
grep -- foo **/*(D.om)
' | tr '\n
find . -type f -printf '%T@\t%p%pre%' |
  tr '\n%pre%' '%pre%\n' |
  sort -rg |
  cut -f2- |
  tr '\n%pre%' '%pre%\n' |
  xargs -r0 grep foo
' '%pre%\n' | sort -rg | cut -f2- | tr '\n%pre%' '%pre%\n' | xargs -r0 grep foo
    
por 23.07.2013 / 18:00
0

Se você não tem algo como zsh , isso não é totalmente trivial. Provavelmente, é mais eficiente obter os hits e, em seguida, ordenar pelo tempo de modificação de cada arquivo com um hit.

grep -rl 'regex' . |
while read -r file; do
    stat -c '%Y:%n' "$file"
done | sort | cut -d: -f2-

Isso obviamente irá quebrar se você tiver nomes de arquivos com novas linhas em seus nomes ou algo assim.

    
por 23.07.2013 / 19:21

Tags