Вы могли бы сделать это:
- извлечь значения года / месяца / дня в переменную оболочки,
- создать временный файл
- используйте
touch
команду (добавляя 0 для часа / минуты / секунды), чтобы установить дату изменения временного файла
Поскольку ваш вопрос о bash
, вы, вероятно, используете Linux. test
Программа , используемая в Linux (часть Coreutils ) имеет расширение для сравнения временных меток ( -nt
и -ot
) не найден в стандарте POSIXtest
.
POSIX комментирует это в обосновании test
:
Некоторые дополнительные основные цвета, недавно изобретенные или из KornShell, появились в раннем предложении как часть условной команды ( [[]]
): s1> s2, s1 <s2, str = pattern, str! = Pattern, f1 -nt f2, f1 -ot f2, и f1 -ef f2. Они не были перенесены в тестовую утилиту, когда условная команда была удалена из оболочки, потому что они не были включены в тестовую утилиту, встроенную в исторические реализации утилиты sh.
Используя это расширение, вы можете затем
- создайте другой временный файл с датой, с которой вы хотите сравнить
- используйте
-nt
оператор в, test
чтобы сделать сравнение, которое вы просили.
Вот пример. В пояснениях OP упоминается платформа, поэтому можно использовать ее stat
как альтернативу временным файлам (сравните OSX и 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