Especifica o intervalo de tempo do Unix no parâmetro

2

Eu estou lançando um mrjob no bash e preciso passar como parâmetros um intervalo de arquivos gz que possuem registros de tempo unix neles como: filename_9127381923.gz . Como fazer isso da maneira mais simples possível? Eu posso passar vários parâmetros de arquivo, por sorte.

Intervalo:

1413324000 (Wednesday 0:00)

1413410400 (Thursday 0:00)

pseudo exemplo:

$python my_mrjob.py 1413324000-1413410400.gz

    
por bbrox 23.10.2014 / 15:28

3 respostas

2

Use o operador de faixa:

echo {1413324000..1413324199}.gz

Da mesma forma,

$python my_mrjob.py {1413324000..1413324199}.gz

Se os arquivos não estiverem lá por milésimos de segundo:

$python my_mrjob.py  $(ls {1413324000..1413324199}.gz 2>/dev/null)
    
por 23.10.2014 / 15:34
0

Não é tão simples, mas minha 'arma de escolha'

python my_mrjob.py $(
for f in {1413324000..1413410400}; do [ -f filename_$f.gz ] && echo $f; done
) 

PS: IMHO, o trabalho python em si deve ser modificado para permitir a entrada do intervalo, com inteligência adicional para pular arquivos não existentes. Será muito mais rápido e simples. A sintaxe {a..b} não é um iterador preguiçoso; ele realmente gera todos os números, passando-os para a instrução 'for'. Isso pode resultar em ficar sem espaço no env.

    
por 25.10.2014 / 07:57
0

Crie alguns arquivos de teste falsos: (somente para este exemplo)

$ touch filename_{1000000000..1000000099..5}.gz

Pegue um intervalo de arquivos "time" de ls output e passe isso para echo :

$ echo $(ls | awk -F'[_,]' '1000000044<=$2 && $2<=1000000066')

nome_do_arquivo_1000000045.gz nome_do_arquivo_1000000050.gz nome_do_arquivo_1000000055.gz nome_do_arquivo_1000000060.gz nome_do_arquivo_1000000065.gz

Substitua echo pela sua chamada $python conforme necessário.

    
por 25.10.2014 / 09:44