Bunu yapabilirsin:
- yıl / ay / gün değerlerini kabuk değişkenine ayıklamak,
- geçici bir dosya oluştur
touch
geçici dosya için değişiklik tarihini ayarlamak üzere (saat / dakika / saniye için 0s ekleyerek) komutunu kullanın
Sorunuz ilgili bash
olduğu için muhtemelen Linux kullanıyorsunuz. test
Linux kullanılan programın (bir parçası coreutils ) zaman damgası karşılaştırma (uzantıları vardır -nt
ve -ot
bulunmayan) OPSIX'dekitest
.
POSIX bu konuda mantıklı yorumlar test
:
Yeni icat edilen veya KornShell'den gelen bazı ek primerler, koşullu komutun bir parçası olarak erken bir teklifte ortaya çıktı ( [[]]
): s1> s2, s1 <s2, str = desen, str! = Desen, f1 -nt f2, f1 -ot f2, ve f1-ef f2. Koşullu komut kabuktan kaldırıldığında test yardımcı programına iletilmemiştir çünkü sh yardımcı programının tarihsel uygulamalarına yerleştirilmiş test yardımcı programına dahil edilmemiştir.
Bu uzantıyı kullanarak,
- karşılaştırmak istediğiniz tarihle başka bir geçici dosya oluşturun
- istediğiniz karşılaştırmayı yapmak için
-nt
operatörü kullanın test
.
İşte bir örnek. OP tarafından yapılan bir açıklama platformdan bahsetti, bu yüzden stat
geçici dosyalara alternatif olarak kullanılabilir ( OSX ve Linux'u karşılaştırın ):
#!/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