Você poderia fazer isso:
- extrair os valores ano / mês / dia em uma variável shell,
- crie um arquivo temporário
- use o
touchcomando (adicionando 0s por hora / minuto / segundo) para definir a data de modificação do arquivo temporário
Porque sua pergunta é sobre bash, você provavelmente está usando Linux. O testprograma usado no Linux (parte do coreutils ) possui extensões para comparação de timestamp ( -nte -ot) não encontradas no POSIXtest .
O POSIX comenta sobre isso na justificativa para test:
Algumas primárias adicionais recentemente inventadas ou do KornShell apareceram em uma proposta inicial como parte do comando condicional ( [[]]): s1> s2, s1 <s2, str = padrão, str! = Padrão, f1 -nt f2, f1 -ot f2, e f1 -ef f2. Eles não foram transportados para o utilitário de teste quando o comando condicional foi removido do shell porque não foram incluídos no utilitário de teste incorporado às implementações históricas do utilitário sh.
Usando essa extensão, você pode então
- crie outro arquivo temporário com a data em que você deseja comparar
- use o
-ntoperador testpara fazer a comparação solicitada.
Aqui está um exemplo. Um esclarecimento do OP mencionou a plataforma, para que se pudesse usar statcomo alternativa aos arquivos temporários (compare OSX e 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