Filtrar uma lista de strings usando matemática

2

Eu tenho um diretório com arquivos listados assim:

abc201303130110.txt
abc201303140511.txt
abc201303150112.txt

Como você pode ver, o nome do arquivo contém um carimbo de data e hora. Desejo retornar todos os arquivos com o valor 201303140000 ou superior no nome do arquivo.

Eu posso usar o grep para pegar a parte datetime do nome do arquivo, mas não sei como canalizar um filtro que pode fazer algo como X > 201303140000 .

    
por Chaos 24.03.2013 / 08:13

3 respostas

3

Se o seu awk é o GNU awk , você pode simplesmente usar:

find . -type f | awk '{ match($0, /2013[0-9]+/,arr)}  arr[0] >= 201303140000 '
    
por 24.03.2013 / 09:34
2

Perl para o resgate! A opção -n do Perl funciona um pouco como sed -n e o perl é mais poderoso em sua correspondência e aritmética.

dennis@lightning:/tmp/foo$ ls -1
abc201303130110.txt
abc201303140511.txt
abc201303150112.txt
dennis@lightning:/tmp/foo$ ls | perl -ne '$d=$_; $d =~ s/.*?(\d+).*//s; print if $d >= 201303140000'
abc201303140511.txt
abc201303150112.txt
    
por 24.03.2013 / 11:23
2

com zsh :

print -rl abc<201303140000->.txt
    
por 24.03.2013 / 12:39