Como encontrar arquivos pelo tempo em seu nome de arquivo? [duplicado]

3

Nós temos um diretório que contém arquivos que contém tempo no nome do arquivo

./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
./test.2013-06-13_03-01.gz
./test.2013-06-14_03-01.gz
./test.2013-06-15_04-01.gz

Como listar arquivos se o nome do arquivo for maior que N dias antes?

    
por Howard 20.06.2013 / 05:33

2 respostas

2

Que tal algo assim?

maxdate=$(date -d "5 days ago" "+%Y-%m-%d");
for fn in *.gz; do
    [ "$fn" ">" "test.${maxdate}_99-99.gz" ] || echo $fn
done

Eu estou ignorando a parte do nome do arquivo após a data (tempo, presumivelmente?), mas seria bastante fácil modificar isso para considerar essa parte do nome do arquivo também, se necessário.

Esta resposta é baseada em uma pergunta semelhante no Stack Overflow: link

    
por 20.06.2013 / 07:12
1

Você pode usar o comando date para encontrar a data de N dias antes e, em seguida, usar grep para pesquisar em seu arquivo de texto.

grep 'date +%Y-%m-%d -d "5 days ago"' test.txt

test.txt:

./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
./test.2013-06-13_03-01.gz
./test.2013-06-14_03-01.gz
./test.2013-06-15_04-01.gz

saída:

./test.2013-06-15_04-01.gz

Hoje é 20/06/2013, há 5 dias é 15/06/2013.

Atualizar

A solução final, eu uso um pequeno script:

#!/bin/bash

FILE=$1
tmp="/tmp/tmp_$$.txt"
tmp1="/tmp/tmp1_$$.txt"
maxday=$2

cp $FILE $tmp

for i in 'seq 1 $maxday'
do
    date_point='date +%Y-%m-%d -d "$i days ago"'
    grep -v "$date_point" $tmp > $tmp1
    cp $tmp1 $tmp
done

echo "Files match:"
cat $tmp
rm -rf $tmp
rm -rf $tmp1

Este script irá remover todos os arquivos N dias atrás até agora da saída, então se você quiser encontrar todos os arquivos com mais de N dias, você deve definir maxday = N - 1 , ou seja, se você deseja arquivar com mais de 8 dias:

./test.sh test.txt 7

Ouput:

Files match:
./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
    
por 20.06.2013 / 06:38