Anda bisa melakukan ini:
- ekstrak nilai tahun / bulan / hari ke dalam variabel shell,
- buat file sementara
- gunakan
touch
perintah (menambahkan 0s untuk jam / menit / detik) untuk mengatur tanggal modifikasi untuk file sementara
Karena pertanyaan Anda adalah tentang bash
, Anda kemungkinan menggunakan Linux. The test
program yang digunakan dalam Linux (bagian dari coreutils ) memiliki ekstensi untuk timestamp perbandingan ( -nt
dan -ot
) tidak ditemukan dalam POSIXtest
.
POSIX berkomentar tentang ini dalam dasar pemikiran untuk test
:
Beberapa primer tambahan yang baru ditemukan atau dari KornShell muncul dalam proposal awal sebagai bagian dari perintah kondisional ( [[]]
): s1> s2, s1 <s2, str = pola, str! = Pola, f1-bukan f2, f1 -ot f2, dan f1 -ef f2. Mereka tidak dibawa maju ke utilitas uji ketika perintah kondisional dikeluarkan dari shell karena mereka belum dimasukkan dalam utilitas tes yang dibangun ke dalam implementasi historis utilitas sh.
Dengan menggunakan ekstensi itu, Anda bisa melakukannya
- buat file sementara lainnya dengan tanggal yang ingin Anda bandingkan
- gunakan
-nt
operator test
untuk membuat perbandingan yang Anda minta.
Berikut ini sebuah contoh. Klarifikasi oleh OP menyebutkan platform tersebut, sehingga orang dapat menggunakan stat
sebagai alternatif untuk file sementara (bandingkan OSX dan 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