Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux date 指令取得相對日期時間完整參考

編輯:Linux 教學

自動化腳本中常需計算「昨天」、「前天」等相對日期以處理日誌輪轉、備份命名等任務。date 指令的 -d 參數支援豐富的自然語言時間表達,以下整理常用格式供快速查閱。

常用相對日期格式

需求指令範例輸出範例 (假設今天 2024-01-15)
昨天date -d 'yesterday' +\"%Y_%m_%d\"2024_01_14
昨天 (替代寫法)date -d '-1 day' +\"%Y_%m_%d\"2024_01_14
昨天 (另一種寫法)date -d '1 days ago' +\"%Y_%m_%d\"2024_01_14
前天date -d '-2 day' +\"%Y_%m_%d\"2024_01_13
前天 (替代寫法)date -d '2 days ago' +\"%Y_%m_%d\"2024_01_13
大前天date -d '-3 day' +\"%Y_%m_%d\"2024_01_12
大前天 (替代寫法)date -d '3 days ago' +\"%Y_%m_%d\"2024_01_12
明天date -d 'tomorrow' +\"%Y_%m_%d\"2024_01_16
明天 (替代寫法)date -d '+1 day' +\"%Y_%m_%d\"2024_01_16
一週前date -d '-1 week' +\"%Y_%m_%d\"2024_01_08
一個月前date -d '-1 month' +\"%Y_%m_%d\"2023_12_15
一年後date -d '+1 year' +\"%Y_%m_%d\"2025_01_15
本月第一天date -d '$(date +%Y-%m-01)' +\"%Y_%m_%d\"2024_01_01
上月最後一天date -d '$(date +%Y-%m-01) -1 day' +\"%Y_%m_%d\"2023_12_31

實戰應用:自動化日誌清理腳本

#!/bin/bash
# 每天 00:00 執行,打包昨天日誌並移至遠端儲存 (NFS 掛載點)
LOG_DIR="/var/log/nginx"
BACKUP_DIR="/mnt/nfs/logs_backup"
DATE_STR=$(date -d 'yesterday' +\"%Y_%m_%d\")

cd $LOG_DIR
tar -czf ${BACKUP_DIR}/access_${DATE_STR}.tar.gz access_${DATE_STR}.log
# 驗證備份成功後再刪除本地檔案
if [ $? -eq 0 ]; then
    rm -f access_${DATE_STR}.log
    logger "Log rotation done for ${DATE_STR}"
else
    logger "Log rotation FAILED for ${DATE_STR}"
fi

crontab 設定範例

# 每天 00:05 執行日誌輪轉腳本
05 0 * * * /usr/local/bin/rotate_nginx_logs.sh >> /var/log/rotate.log 2>&1

進階格式化輸出參考

# 完整時間戳
date -d 'yesterday' +\"%Y-%m-%d %H:%M:%S\"
# 2024-01-14 00:00:00

# Unix 時間戳 (秒)
date -d 'yesterday' +%s
# 1705161600

# ISO 8601 格式
date -d 'yesterday' -Iseconds
# 2024-01-14T00:00:00+08:00

# 自訂格式:年月日_時分秒
date -d '-2 day' +\"%Y%m%d_%H%M%S\"
# 20240113_000000

注意事項

  • -d 參數為 GNU date 擴充功能,BSD/macOS 版 date 需使用 -v 參數 (如 date -v-1d)
  • 時區影響:輸出時間為系統當前時區,跨時區伺服器建議統一使用 UTC
  • 月份邊界:-1 month 在 3/31 會回到 2/28/29,非 2/31,符合直覺但需留意
  • 效能:單次 date 呼叫極快,但在大量迴圈中建議捕獲一次基準時間再運算

總結

善用 date -d 的自然語言解析,能大幅簡化 Shell 腳本中的日期運算邏輯,配合 crontab 即可構建可靠的自動化維護體系。

Copyright © Windows教程網 All Rights Reserved