Podrías hacer esto:
- extraer los valores de año / mes / día en una variable de shell,
- crear un archivo temporal
- use el
touch
comando (agregando 0s por hora / minuto / segundo) para establecer la fecha de modificación para el archivo temporal
Debido a que su pregunta es sobre bash
, es probable que esté utilizando Linux. El test
programa utilizado en Linux (parte de coreutils ) tiene extensiones para la comparación de marcas de tiempo ( -nt
y -ot
) que no se encuentran en POSIXtest
.
POSIX comenta sobre esto en la justificación de test
:
Algunas primarias adicionales recién inventadas o de KornShell aparecieron en una propuesta inicial como parte del comando condicional ( [[]]
): s1> s2, s1 <s2, str = pattern, str! = Pattern, f1 -nt f2, f1 -ot f2, y f1 -ef f2. No se transfirieron a la utilidad de prueba cuando el comando condicional se eliminó del shell porque no se han incluido en la utilidad de prueba integrada en implementaciones históricas de la utilidad sh.
Usando esa extensión, podrías
- cree otro archivo temporal con la fecha con la que desea comparar
- use el
-nt
operador test
para hacer la comparación que solicitó.
Aquí hay un ejemplo. Una aclaración de OP mencionó la plataforma, por lo que uno podría usar stat
como alternativa a los archivos temporales (compare OSX y Linux ):
#!/bin/bash
# inspect each file...
with_tempfile() {
echo "** with temporary file $name"
test=$MYTEMP/$name
touch -t $date $test
[ $name -nt $test ] && echo "...newer"
}
# alternatively (and this is system-dependent)
with_stat() {
echo "** with stat command $name"
stat=$(stat -t "%Y%m%d%H%M" -f "%Sm" $name)
[ $stat -gt $date ] && echo "...newer"
}
MYTEMP=$(mktemp -d /var/tmp/isnewer.XXXXXX)
trap "rm -rf $MYTEMP" EXIT
for name in file-name-[0-9][0-9]*.txt
do
if [ -f "$name" ];
then
date=${name%%.txt}
date=${date/file-name-}
date=${date//-/}2359
with_tempfile $name
with_stat $name
fi
done