คุณสามารถทำได้:
- แยกค่าปี / เดือน / วันลงในตัวแปรเชลล์
- สร้างไฟล์ชั่วคราว
- ใช้
touch
คำสั่ง (เพิ่ม 0 วินาทีสำหรับชั่วโมง / นาที / วินาที) เพื่อตั้งวันที่แก้ไขสำหรับไฟล์ชั่วคราว
เนื่องจากคำถามของคุณเกี่ยวกับbash
คุณน่าจะใช้ Linux test
โปรแกรมที่ใช้ในลินุกซ์ (ส่วนหนึ่งของcoreutils ) มีส่วนขยายสำหรับการเปรียบเทียบการประทับเวลา ( -nt
และ-ot
) ไม่พบในPOSIXtest
POSIX แสดงความคิดเห็นเกี่ยวกับสิ่งนี้ในเหตุผลสำหรับtest
:
บางส่วนเพิ่มเติมที่คิดค้นขึ้นใหม่หรือจาก KornShell ปรากฏในข้อเสนอเริ่มต้นเป็นส่วนหนึ่งของคำสั่งตามเงื่อนไข ( [[]]
): s1> s2, s1 <s2, str = รูปแบบ, 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