Verifique o nome do arquivo e filtre-o com base na data

0

Eu tenho muitos arquivos que um dos meus scripts gera diariamente. A estrutura do nome do arquivo se parece com:

capacity_data_2012-12-02.txt, capacity_data_2012-12-03.txt e assim por diante ...

Eu quero criar um script que verifique o último mês de dados. Por exemplo, hoje é capacity_data_2012-12-28.txt. Eu criaria uma lista dos arquivos nos últimos 30 dias. Qualquer arquivo com mais de 30 dias (não na minha lista) seria movido para outro diretório.

Qualquer direção seria útil.

    
por maneeshshetty 28.12.2012 / 07:16

1 resposta

1

Se você quiser mover arquivos com mais de 30 dias, ou mais precisamente, arquivos que não foram escritos nos últimos 30 dias:

find . -maxdepth 1 -type f -name "capacity_data_???-??-??.txt" -mtime +30 -exec echo mv {} another_directory/ \;

(Remova o echo quando estiver satisfeito com a saída.)

Se você quiser listar os arquivos dos últimos 30 dias:

awk 'BEGIN{now_n = systime() - 30 * 24 * 60 * 60;
           for(n = 30; n >= 0; n--) {
             print "capacity_data_" strftime("%Y-%m-%d", now_n) ".txt"
             now_n += 24* 60 * 60;
           }}'

E se você quiser fazer um loop nesses arquivos:

files=$(awk 'BEGIN{now_n = systime() - 30 * 24 * 60 * 60;
                   for(n = 30; n >= 0; n--) {
                     print "capacity_data_" strftime("%Y-%m-%d", now_n) ".txt"
                     now_n += 24* 60 * 60;
                    }}')
for file in $files; do
  echo $file
done
    
por 28.12.2012 / 10:05