Como ordenar os nomes de arquivos mostrados no comando grep com base no timestamp?

2

No comando a seguir, como posso obter os nomes dos arquivos com base em seu timestamp

$ grep "exit 0" a*
a1.txt:+ exit 0
a2.txt:+ exit 0
a3.txt:+ exit 0
a4.txt:+ exit 0
a5.txt:+ exit 0

$ ls -latr 
-rw-r--r-- 1 user grp  83046 Oct 27 06:46 a5.txt
-rw-r--r-- 1 user grp  68108 Oct 27 07:59 a1.txt
-rw-r--r-- 1 user grp 159792 Oct 27 12:35 a2.txt
-rw-r--r-- 1 user grp 225703 Oct 27 16:41 a3.txt
-rw-r--r-- 1 user grp 246782 Oct 27 20:17 a4.txt

Como você vê a saída acima, não estou obtendo a saída com base no timestamp em que o arquivo foi criado. Existe alguma maneira de alcançá-lo?

    
por janani 28.10.2014 / 21:10

3 respostas

3

Se nenhum dos nomes de arquivo contiver espaço, guia, nova linha, ? , * , [ caracteres ou se for chamado - , isso deverá ser feito:

grep "exit 0" -- $(ls -tr a*)

$() é chamado de substituição de comando. Seu shell executará primeiro ls -tr e, em seguida, usará a saída como a lista de arquivos para o comando grep .

    
por 28.10.2014 / 21:15
2

Com o shell zsh , você pode afetar a ordem dos globs com qualificadores glob .

grep 'exit 0' a*(.Om)

Om é para reverter o tempo pelo tempo de modificação. Eu também adicionei .⃞ para selecionar apenas arquivos regulares (não diretórios ou pipes ou dispositivos ou symlinks ...).

    
por 28.10.2014 / 21:42
-2

Obrigado Omni. Mesmo da seguinte maneira, eu sou capaz de conseguir isso. Claro que o urs é o mais simples. muito obrigado

       grep -H "exit 0" /opt/ctmagent/ctm/sysout_archives/141027/d_dms_btch_alrt_ifm_scp_ksh* | awk -F":" '{system("ls -latr "$1"")}'
    
por 28.10.2014 / 21:24