Bạn có thể làm điều này:
- trích xuất các giá trị năm / tháng / ngày vào một biến shell,
- tạo một tập tin tạm thời
- sử dụng
touch
lệnh (thêm 0 giây cho giờ / phút / giây) để đặt ngày sửa đổi cho tệp tạm thời
Bởi vì câu hỏi của bạn là về bash
, bạn có thể đang sử dụng Linux. Các test
chương trình được sử dụng trong Linux (một phần của coreutils ) có phần mở rộng để so sánh dấu thời gian ( -nt
và -ot
) không tìm thấy trong POSIXtest
.
Nhận xét POSIX về điều này trong lý do cho test
:
Một số nguyên tắc bổ sung mới được phát minh hoặc từ KornShell đã xuất hiện trong một đề xuất ban đầu như là một phần của lệnh điều kiện ( [[]]
): s1> s2, s1 <s2, str = mẫu, str! = Mẫu, f1 -nt f2, f1 -ot f2, và F1 -ef f2. Chúng không được chuyển tiếp vào tiện ích thử nghiệm khi lệnh điều kiện được gỡ bỏ khỏi shell vì chúng không được bao gồm trong tiện ích thử nghiệm được tích hợp trong các triển khai lịch sử của tiện ích sh.
Sử dụng tiện ích mở rộng đó, sau đó bạn có thể
- tạo một tệp tạm thời khác với ngày bạn muốn so sánh với
- sử dụng
-nt
toán tử trong test
để thực hiện so sánh bạn yêu cầu.
Đây là một ví dụ. Một sự làm rõ của OP đã đề cập đến nền tảng này, vì vậy người ta có thể sử dụng stat
thay thế cho các tệp tạm thời (so sánh OSX và 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