¿Cómo encontrar files por el time en su nombre de file?

Tenemos un directory que contiene files que contienen time en su nombre de file

./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 

¿Cómo hacer una list de files si su nombre de file es más de N días antes?

¿Qué tal algo como esto?

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

Estoy ignorando la parte del nombre del file después de la date (¿time, presumiblemente?), Pero sería bastante fácil modificar esto para considerar esa parte del nombre del file si es necesario.

Esta respuesta se basa en una pregunta similar sobre Stack Overflow: https://stackoverflow.com/questions/2443078/filtering-filenames-with-bash

Puede usar el command de date para encontrar la date de N días antes, y luego usar grep para search en su file de text.

 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 

salida:

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

Hoy es 20/06/2013, hace 5 días es 15/06/2013.

Actualizar

La solución final, uso un pequeño 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 

Esta secuencia de commands eliminará todos los files de N hace un momento desde la salida, por lo que si desea search todos los files anteriores a N días, debe definir maxday = N - 1 , es decir, si desea maxday = N - 1 files anteriores a 8 días:

 ./test.sh test.txt 7 

Ouput:

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