Lista de arquivos com base na data e hora no nome do arquivo

1

Eu quero automatizar uma tarefa no UNIX e criar um script.

Existe um diretório em que todos os dias chegam 2 arquivos e esses arquivos chegam a qualquer momento entre 22h e 1h da manhã.

O nome do arquivo é algo como batm53_20131025_BARC5300001201310240000000200004233.221341696408 .

Se você ver um nome de arquivo tem 3 partes:

  1. batm53 que é constante
  2. data em que o arquivo chega no diretório
  3. essa parte é BARC5300001201310170000000200004233.221341696408 na qual BAR5300001 é constante e depois da data do arquivo.

Suponha que hoje seja 24 de outubro e que o arquivo venha depois da 1h e a segunda parte do nome do arquivo mostre 25 de outubro, mas na terceira parte depois que BAR5300001 mostrar a data de 24 de outubro (20131024).

Estou enfrentando problema neste cenário. Se o arquivo chegar entre as 10 da noite e as 12 da manhã, então eu posso tornar o script mais fácil com a ajuda do comando find, mas estou enfrentando problema em fazer essa parte. Como posso verificar se o arquivo vem depois das 12h porque esse arquivo deve ser anterior e depois das 12h deve mudar?

    
por Pallvi Mahajan Sapen 25.10.2013 / 23:13

1 resposta

1

Você pode criar o arquivo "temp" às 12h e, em seguida, localizar o arquivo mais novo e renomeá-lo com a respectiva data

Por exemplo:

Etapa 1

Crie um arquivo às 12h ou depois, usando o seguinte comando.

$ touch -d "$(date +%F)" temp.file

touch fornecerá a data do arquivo se você executar em 26 de outubro de 2013, a data do arquivo será "26 de outubro às 00:00".

Etapa 2

Como você deseja definir a data anterior para o arquivo, crie uma variável para obter a data anterior:

$ Yesterday=$(date +%Y%m%d -d '1 day ago')

NOTA: (isso salvará o valor "20131025" na variável).

Etapa 3

Agora você pode encontrar arquivos mais novos que temp.file que criamos.

$ find . -type f -newer temp.file

OK, você pode ver os arquivos criados depois das 12h da manhã, como desejar. Agora você deseja renomear a data anterior?

$ find . -type f -newer temp.file | \
    awk -v y=$Yesterday '{split($0,arr,"_"); \
    print "mv -v --",$0, arr[1]"_"y"_"arr[3]}'

O comando acima apenas imprimirá a saída, onde o primeiro arquivo é o nome do arquivo original e o segundo arquivo que você deseja.

Se você acha que a saída parece estar bem, basta anexar | sh ao mesmo comando

$ find . -type f -newer temp.file | \
    awk -v y=$Yesterday '{split($0,arr,"_"); \
    print "mv -v --",$0, arr[1]"_"y"_"arr[3]}' | sh

Isso renomeará o arquivo com a data anterior na segunda parte. Então você pode criar um script com a ajuda dos comandos acima e depois rodar depois do 12 usando o cron.

    
por 25.10.2013 / 23:51