Você pode fazer isso:
- extrair os valores de ano / mês / dia em uma variável de shell,
- crie um arquivo temporário
- use o comando
touch
(adicionando 0s por hora / minuto / segundo) a definir a data de modificação para o arquivo temporário
Como sua pergunta é sobre bash
, provavelmente você está usando o Linux. O programa test
usado no Linux (parte de coreutils ) possui extensões para comparação de timestamp ( -nt
e -ot
) não encontradas em POSIX test
.
POSIX comenta sobre isso no raciocínio para test
:
Some additional primaries newly invented or from the KornShell appeared in an early proposal as part of the conditional command ([[]]
): s1 > s2, s1 < s2, str = pattern, str != pattern, f1 -nt f2, f1 -ot f2, and f1 -ef f2. They were not carried forward into the test utility when the conditional command was removed from the shell because they have not been included in the test utility built into historical implementations of the sh utility.
Usando essa extensão, você poderia então
- crie outro arquivo temporário com a data que você deseja comparar com
- use o operador
-nt
em test
para fazer a comparação solicitada.
Aqui está um exemplo. Um esclarecimento por OP mencionou a plataforma, portanto, pode-se usar stat
como uma 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