我之前曾經寫過一個 Shell Script 要找出「昨天」的 Apache Log,找到後會自動用 bzip2 壓縮,但這段程式我記得當時寫的十分痛苦,因為實在很難組合出一個「昨天」的字串格式,當時我的程式碼如下:
YEAR=`date +%y`
MON=`date +%m`
DAY=`date +%d`
# Log for www.example.com
#-----------------------------------------------------------------
LOG_DIR=/var/log/apache2
for filename in `ls -1 $LOG_DIR/ex*.log`;
do
if [[ $filename != $LOG_DIR/"ex$YEAR$MON$DAY.log" ]]; then
bzip2 -q -9 -s $filename;
fi
done
看到了沒?我寫的方法有多笨阿!我竟然是先抓今天的日期出來,然後取出目錄中所有檔案,並且一一比對該檔案是否為「當天的檔案」,如果不是的話就進行壓縮。
但我最近發現原來 date 指令還有一個很棒的用法,要找到昨天的日期原來可以用以下語法達成:
date -d 'yesterday' +%Y-%m-%d
如果要找到昨天的 Log 檔名,可以用以下語法:
date -d 'yesterday' +ex%Y%m%d.log
今天重寫了一遍當時的程式,你看這種 shell script 才叫做乾淨啊!
LOG_DIR=/var/log/apache2
LOG_NAME=`date -d 'yesterday' +ex%y%m%d.log`
bzip2 -q -9 -s $LOG_DIR/$LOG_NAME
神奇的是,如果你要找 3 天前的 Log 檔案,可以用以下語法:
date -d '3 days ago' +ex%Y%m%d.log
如果要得到下週一的日期字串,可以用以下語法:
date -d 'next Mon' +%Y-%m-%d
你說神不神奇呢?! ^_^