Ви можете це зробити:
- витягнути значення року / місяця / дня в змінну оболонки,
- створити тимчасовий файл
- використовуйте
touch
команду (додаючи 0s на годину / хвилину / секунду), щоб встановити дату модифікації тимчасового файлу
Оскільки ваше питання про те 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